Hello to all,
I have a Parent object with Childs.
Parent mapping:
Code:
<class name="Parent" table="PARENT" dynamic-insert="true" dynamic-update="true">
<id name="Identity" column="PARENTID" type="Int64" unsaved-value="0">
<generator class="sequence">
<param name="sequence">SEQ__PARENT</param>
</generator>
</id>
<timestamp name="RecordVersion" column="RECORDTIMESTAMP" generated="always"/>
<property name="Name" column="NAME" type="String" not-null="true"/>
<set name="Childs" lazy="true" fetch="select" generic="true" cascade="all-delete-orphan" inverse="true">
<key>
<column name="PARENTID" not-null="true"/>
</key>
<one-to-many class="Child"/>
</set>
</class>
Child mapping:
Code:
<class name="Child" table="CHILD" dynamic-insert="true" dynamic-update="true">
<id name="Identity" column="CHILDID" type="Int64" unsaved-value="0">
<generator class="sequence">
<param name="sequence">SEQ__CHILD</param>
</generator>
</id>
<timestamp name="RecordVersion" column="RECORDTIMESTAMP" generated="always"/>
<property name="Name" column="NAME" type="String" not-null="true"/>
<many-to-one class="Parent" name="Parent" column="PARENTID" fetch="select" not-null="true" cascade="all-delete-orphan"/>
</class>
I load parent and the I call Delete method and get this exception:
ERROR NHibernate.Impl.SessionImpl [(null)] <(null)> - could not synchronize database state with session
NHibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) for Tests.Child instance with identifier: 1
at NHibernate.Persister.Entity.AbstractEntityPersister.Check(Int32 rows, Object id, Int32 tableNumber, IExpectation expectation, IDbCommand statement)
at NHibernate.Persister.Entity.AbstractEntityPersister.Delete(Object id, Object version, Int32 j, Object obj, SqlCommandInfo sql, ISessionImplementor session, Object[] loadedState)
at NHibernate.Persister.Entity.AbstractEntityPersister.Delete(Object id, Object version, Object obj, ISessionImplementor session)
at NHibernate.Impl.ScheduledDeletion.Execute()
at NHibernate.Impl.SessionImpl.Execute(IExecutable executable)
at NHibernate.Impl.SessionImpl.ExecuteAll(IList list)
at NHibernate.Impl.SessionImpl.Execute()
The problem is that before delete statement, nHibernate issues an update statement which updates record versions of Parent and Child in database.
Regards,
Mindaugas