[hibernate] many-to-one not-null property
Bonjours,
j'utilise hibernate synchronizer
et j'ai une relation parent enfant.
Je suis étonné de voir que les méthode YY.addToXX()
ne definissent pas la valeur de la clef étrangère.
j'ai l'erreur suivante
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
Exception in thread "main" org.hibernate.PropertyValueException: not-null property references a null or transient value: test.hibernate.InfPlatform.InfHostingsite
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at test.test.Test1.createAndStoreSite(Test1.java:46)
at test.test.Test1.main(Test1.java:23) |
Un hosting site peut contenir plusieurs platform et une platforme est lié OBLIGATOIREMENT à un seul site.
dans site j'ai fait:
Code:
1 2 3 4
| <set name="InfPlatform" inverse="true">
<key column="`vs_objectUID`"/>
<one-to-many class="InfPlatform"/>
</set> |
et dans platforme
Code:
1 2 3 4 5 6 7 8
| <many-to-one
name="InfHostingsite"
column="`inf_hostingSiteUID`"
class="InfHostingsite"
not-null="true"
>
</many-to-one> |
dans basehostingsite.java
j'ai ça:
Code:
1 2 3 4 5
|
public void addToInfPlatform (test.hibernate.InfPlatform infPlatform) {
if (null == getInfPlatform()) setInfPlatform(new java.util.TreeSet<test.hibernate.InfPlatform>());
getInfPlatform().add(infPlatform);
} |
et ma main ressemble à ceci
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
InfPlatform infPlatform = new InfPlatform();
infPlatform.setInfName("platsyl"+(new Random()).nextInt());
infPlatform.setInfDescription("test");
InfHostingsite site1 = (InfHostingsite)session.load(InfHostingsite.class, 3149);
site1.addToInfPlatform(infPlatform);
//Set<InfPlatform> s = site1.getInfPlatform();
session.save(infPlatform);
tx.commit(); |