Ik ben al enige tijd opzoek naar een (waarschijnlijk simpele) oplossing voor volgend probleem:
Ik gebruik Hibernate, Java (Spring) en een MSSQL db.
In de db zitten volgende tabellen:
De primary keys van beide tabellen worden automatisch geïncrementeerd.
Ik wil een surveyentry persisten. In dit surveyentry object zit een set van surveyentryanswers (met surveyentryid null want dit moet nog gegenereerd worden).
surveyentry.hbm.xml
surveyentryanswer.hbm.xml
Hoe kan ik er voor zorgen dat wanneer Hibernate de surveyentry persist hij het gegenereerde surveyentry id opzoekt en gebruikt als foreign key in de surveyentryanswer objecten?
Ik gebruik Hibernate, Java (Spring) en een MSSQL db.
In de db zitten volgende tabellen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| +-----------------+ |SurveyEntry | +-----------------+ |SurveyEntryID PK| | | |some fields | +-----------------+ +----------------------+ |SurveyEntryAnswer | +----------------------+ |SurveyEntryAnswerID PK| |SurveyEntryID FK| | | |some fields | +----------------------+ |
De primary keys van beide tabellen worden automatisch geïncrementeerd.
Ik wil een surveyentry persisten. In dit surveyentry object zit een set van surveyentryanswers (met surveyentryid null want dit moet nog gegenereerd worden).
surveyentry.hbm.xml
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <hibernate-mapping> <class name="....SurveyEntry" table="SurveyEntry"> <id name="surveyEntryId" type="int"> <column name="SurveyEntryID" /> <generator class="increment" /> </id> <set name="surveyEntryAnswers" inverse="true" cascade="persist"> <key> <column name="SurveyEntryID" not-null="true" /> </key> <one-to-many class="....SurveyEntryAnswer" /> </set> </class> </hibernate-mapping> |
surveyentryanswer.hbm.xml
XML:
1
2
3
4
5
6
7
8
9
10
11
| <hibernate-mapping> <class name="....SurveyEntryAnswer" table="SurveyEntryAnswer"> <id name="surveyEntryAnswerId" type="int"> <column name="SurveyEntryAnswerID" /> <generator class="increment" /> </id> <many-to-one name="surveyEntry" class=".....SurveyEntry" fetch="select"> <column name="SurveyEntryID" not-null="true" /> </many-to-one> </class> </hibernate-mapping> |
Hoe kan ik er voor zorgen dat wanneer Hibernate de surveyentry persist hij het gegenereerde surveyentry id opzoekt en gebruikt als foreign key in de surveyentryanswer objecten?
Java:
1
2
3
4
5
6
7
8
| org.hibernate.PropertyValueException: not-null property references a null or transient value: ....SurveyEntryAnswer.surveyEntry org.hibernate.engine.Nullability.checkNullability(Nullability.java:72) org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290) org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121) org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131) org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87) .... |