Hibernate no me permite persistir un objeto que contiene un objeto incrustado nulo con un campo entero. Por ejemplo, si tengo una clase llamada cosa que tiene este aspectoHibernate no permite que un objeto incrustado con un campo int sea nulo?
@Entity
public class Thing {
@Id
public String id;
public Part part;
}
donde la Parte es una clase incrustada que tiene este aspecto
@Embeddable
public class Part {
public String a;
public int b;
}
continuación, tratando de conservar un objeto de Cosa con un nulo causas Parte Hibernate para lanzar una excepción. En particular, este código
Thing th = new Thing();
th.id = "thing.1";
th.part = null;
session.saveOrUpdate(th);
causas Hibernate para lanzar esta excepción
org.hibernate.PropertyValueException: not-null property references a null or transient value: com.ace.moab.api.jobs.Thing.part
Mi conjetura es que esto está sucediendo porque la Parte es una clase incrustada y así Part.a y Part.b son simplemente columnas en la tabla de la base de datos de Thing. Como The Thing.part es nulo, Hibernate quiere establecer los valores de la columna Part.a y Part.b en null para la fila para thing.1. Sin embargo, Part.b es un número entero e Hibernate no permitirá que las columnas enteras en la base de datos sean nulas. Esto es lo que causa la Excepción, ¿verdad?
Así que estoy buscando soluciones para este problema. Noté que hacer Part.b un entero en vez de un int parece funcionar, pero por razones que no te aburriré con esto no es una buena opción para nosotros. ¡Gracias!
¿Cómo será su int nulo cuando 'b' es una primitiva? –
Deberías estar usando una clase contenedora (Integer) para cualquier cosa que sea anulable ... – Amalgovinus