Hibernate non mi consente di mantenere un oggetto che contiene un oggetto incorporato null con un campo intero. Per esempio, se ho una classe denominata Cosa che assomiglia a questoHibernate non consente ad un oggetto incorporato con un campo int di essere nullo?
@Entity
public class Thing {
@Id
public String id;
public Part part;
}
cui parte è una classe integrabile che assomiglia a questo
@Embeddable
public class Part {
public String a;
public int b;
}
poi cercando di persistere un oggetto cosa con un nulli cause Parte Iberna per lanciare un'eccezione. In particolare, questo codice
Thing th = new Thing();
th.id = "thing.1";
th.part = null;
session.saveOrUpdate(th);
cause Hibernate per lanciare questa eccezione
org.hibernate.PropertyValueException: not-null property references a null or transient value: com.ace.moab.api.jobs.Thing.part
La mia ipotesi è che questo sta accadendo perché una parte è una classe embedded e così Part.a e Part.b sono semplicemente le colonne nella tabella del database Thing. Poiché Thing.part è null, Hibernate desidera impostare i valori della colonna Part.a e Part.b su null per la riga per thing.1. Tuttavia, Part.b è un numero intero e Hibernate non consente alle colonne integer nel database di essere nulle. Questo è ciò che causa l'eccezione, giusto?
Quindi sto cercando soluzioni alternative per questo problema. Ho notato che rendere Part.b un intero invece di un int sembra funzionare, ma per ragioni che non ti annoierò non è una buona opzione per noi. Grazie!
Come sarà il tuo int nullo quando 'b' è un primitivo? –
Dovresti usare una classe wrapper (Intero) per tutto ciò che è nullable ... – Amalgovinus