This is the simple Parent/Child problem.
Both Parent and Child have pk as Integer id
I need to create/insert a Parent along with many children in same time
Code:
Parent parent = new Parent("Parent");
parent.addChild( new Child("First") )
parent.addChild( new Child("Second") )
session.save( parent )
where addChild is bi-directional parent is set in child
Parent mapping
Code:
<class name="Parent" table="parent" schema="public">
<id name="id" type="integer">
<column name="id" />
<generator class="sequence">
<param name="sequence">parent_id_seq</param>
</generator>
</id>
...
<set name="children" table="child" lazy="true" inverse="true" cascade="all" sort="unsorted">
<key column="id"/>
<one-to-many class="Child" />
</set>
</class>
Child mapping
Code:
<class name="Child" table="child" schema="public">
<id name="id" type="integer" unsaved-value="null">
<column name="id" />
<generator class="sequence">
<param name="sequence">child_id_seq</param>
</generator>
</id>
...
<many-to-one name="parent" class="Parent" column="id" insert="false" update="false" lazy="false"/>
</class>
Well that all to it when I run the code it get the following output
Code:
2006-03-17 00:15:09,140 DEBUG org.hibernate.impl.SessionImpl.<init>(SessionImpl.java:273) - opened session at timestamp: 4679991743037440
2006-03-17 00:15:11,078 DEBUG org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:54) - begin
2006-03-17 00:15:11,078 DEBUG org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:358) - opening JDBC connection
2006-03-17 00:15:11,078 DEBUG org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:59) - current autocommit status: true
2006-03-17 00:15:11,093 DEBUG org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:62) - disabling autocommit
2006-03-17 00:15:11,093 DEBUG org.hibernate.jdbc.JDBCContext.afterTransactionBegin(JDBCContext.java:190) - after transaction begin
2006-03-17 00:15:11,109 DEBUG org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:161) - saving transient instance
2006-03-17 00:15:11,109 DEBUG org.hibernate.jdbc.AbstractBatcher.logOpenPreparedStatement(AbstractBatcher.java:311) - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
2006-03-17 00:15:11,109 DEBUG org.hibernate.jdbc.AbstractBatcher.log(AbstractBatcher.java:346) - select nextval ('parent_id_seq')
2006-03-17 00:15:11,109 DEBUG org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:424) - preparing statement
2006-03-17 00:15:11,109 DEBUG org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:82) - Sequence identifier generated: 186
2006-03-17 00:15:11,109 DEBUG org.hibernate.jdbc.AbstractBatcher.logClosePreparedStatement(AbstractBatcher.java:319) - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
2006-03-17 00:15:11,125 DEBUG org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:470) - closing statement
2006-03-17 00:15:11,125 DEBUG org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:106) - generated identifier: 186, using strategy: org.hibernate.id.SequenceGenerator
2006-03-17 00:15:11,125 DEBUG org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:139) - saving [Parent#186]
2006-03-17 00:15:11,125 DEBUG org.hibernate.engine.Cascade.cascade(Cascade.java:237) - processing cascade ACTION_SAVE_UPDATE for: Parent
2006-03-17 00:15:11,125 DEBUG org.hibernate.engine.Cascade.cascade(Cascade.java:259) - done processing cascade ACTION_SAVE_UPDATE for: Parent
2006-03-17 00:15:11,125 DEBUG org.hibernate.event.def.WrapVisitor.processArrayOrNewCollection(WrapVisitor.java:87) - Wrapped collection in role: Parent.children
2006-03-17 00:15:11,156 DEBUG org.hibernate.engine.Cascade.cascade(Cascade.java:237) - processing cascade ACTION_SAVE_UPDATE for: Parent
2006-03-17 00:15:11,171 DEBUG org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:285) - cascade ACTION_SAVE_UPDATE for collection: Parent.children
2006-03-17 00:15:11,171 DEBUG org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:133) - cascading to saveOrUpdate: Child
2006-03-17 00:15:11,171 DEBUG org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:471) - detached instance of: Child
2006-03-17 00:15:11,171 DEBUG org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:202) - updating detached instance
org.hibernate.TransientObjectException: The given object has a null identifier: Child
I see no error but maybe I got tired to look at this code over and over again.
What do you see ?
Q