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 : Sélectionner tout - Visualiser dans une fenêtre à part
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:
et dans platforme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <set name="InfPlatform" inverse="true"> <key column="`vs_objectUID`"/> <one-to-many class="InfPlatform"/> </set>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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();
Partager