NHibernate version:
1.0.3
Mapping documents:
The interesting ones are:
Table "Code":
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" assembly="IFCC.Model" namespace="IFCC.Model.src.persistent">
<class name="Code" table="Code" lazy="true">
<id name="ID" column="ID" type="Int32" unsaved-value="0">
<generator class="assigned"/>
</id>
<property name="CodeString" column="CodeString" type="String" length="10" not-null="true"/>
<many-to-one name="ClassificationID" column="ClassificationID" class="Classification" not-null="true"/>
<property name="Identifier" column="Identifier" type="String" length="6" not-null="false"/>
<property name="Versionnumber" column="Versionnumber" type="Int32" not-null="false"/>
<property name="Revisionnumber" column="Revisionnumber" type="Int32" not-null="false"/>
<property name="Definition" column="Definition" type="String" not-null="false"/>
<property name="Timestamp" column="Timestamp" type="DateTime" not-null="true"/>
<property name="Username" column="Username" type="String" length="10" not-null="true"/>
<bag name="ArticleReferencesCodeListOnCodeID" inverse="true" lazy="true">
<key column="CodeID"/>
<one-to-many class="ArticleReferencesCode"/>
</bag>
<bag name="CodeDescriptionListOnCodeID" inverse="true" lazy="true">
<key column="CodeID"/>
<one-to-many class="CodeDescription"/>
</bag>
<bag name="CodeHasSearchtermListOnCodeID" inverse="true" lazy="true">
<key column="CodeID"/>
<one-to-many class="CodeHasSearchterm"/>
</bag>
<bag name="SearchtermReferencesCodeListOnCodeID" inverse="true" lazy="true">
<key column="CodeID"/>
<one-to-many class="SearchtermReferencesCode"/>
</bag>
<bag name="CodeHasClassificationAttributeListOnCodeID" inverse="true" lazy="true">
<key column="CodeID"/>
<one-to-many class="CodeHasClassificationAttribute"/>
</bag>
<bag name="CodeReferencesCodeListOnFirstID" inverse="true" lazy="true">
<key column="FirstID"/>
<one-to-many class="CodeReferencesCode"/>
</bag>
<bag name="CodeReferencesCodeListOnSecondID" inverse="true" lazy="true">
<key column="SecondID"/>
<one-to-many class="CodeReferencesCode"/>
</bag>
<bag name="MaterialgroupReferencesCodeListOnCodeID" inverse="true" lazy="true">
<key column="CodeID"/>
<one-to-many class="MaterialgroupReferencesCode"/>
</bag>
<bag name="ConcretionListOnCodeID" inverse="true" lazy="true">
<key column="CodeID"/>
<one-to-many class="Concretion"/>
</bag>
</class>
</hibernate-mapping>
Table "CodeReferencesCode":
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" assembly="IFCC.Model" namespace="IFCC.Model.src.persistent">
<class name="CodeReferencesCode" table="CodeReferencesCode" lazy="true">
<composite-id name="ID" class="CodeReferencesCodeCompositeID">
<key-many-to-one name="FirstID" column="FirstID" class="Code"/>
<key-many-to-one name="SecondID" column="SecondID" class="Code"/>
</composite-id>
<many-to-one name="Comment" column="Comment" class="Comment" not-null="true"/>
<property name="Username" column="Username" type="String" length="10" not-null="true"/>
<property name="Timestamp" column="Timestamp" type="DateTime" not-null="true"/>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():Code:
session = SessionProvider.Instance.GetSession();
ITransaction trans = null;
try
{
trans = session.BeginTransaction();
Comment comment = DaoFactory.getCommentDao().GetById(commentId, false);
foreach (int actualFrom in from)
{
Code codeFrom = DaoFactory.getCodeDao().GetById(actualFrom, false);
foreach (int actualTo in to)
{
Code codeTo = DaoFactory.getCodeDao().GetById(actualTo, false);
AddSingleReference(comment, codeFrom, codeTo);
}
}
trans.Commit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
trans.Rollback();
return false;
}
finally
{
SessionProvider.Instance.CloseSession();
}
return true;
}
Code:
private void AddSingleReference(Comment comment, Code codeFrom, Code codeTo)
{
if (codeFrom.ID > codeTo.ID)
{
Comment inverse = DaoFactory.getCommentDao().GetById(comment.Inverse, false);
AddSingleReference(inverse, codeTo, codeFrom);
return;
}
String userName = SessionProvider.Instance.getUsername();
CodeReferencesCodeCompositeID compositeId = new CodeReferencesCodeCompositeID(codeFrom, codeTo);
CodeReferencesCode reference = new CodeReferencesCode(
compositeId,
comment,
userName,
DateTime.Now);
codeFrom.CodeReferencesCodeListOnFirstID.Add(reference);
codeTo.CodeReferencesCodeListOnSecondID.Add(reference);
comment.CodeReferencesCodeListOnComment.Add(reference);
session.Save(reference);
session.Update(codeFrom);
session.Update(codeTo);
session.Update(comment);
}
and:
Full stack trace of any exception that occurs:
at NHibernate.Impl.SessionImpl.CheckId(Object obj, IClassPersister persister, Object id)
at NHibernate.Impl.SessionImpl.FlushEntity(Object obj, EntityEntry entry)
at NHibernate.Impl.SessionImpl.FlushEntities()
at NHibernate.Impl.SessionImpl.FlushEverything()
at NHibernate.Impl.SessionImpl.Flush()
at NHibernate.Transaction.AdoTransaction.Commit()
at x.AddReference(List`1 from, List`1 to, Int32 commentId)
Name and version of the database you are using:
MSSQL 9.00.1399.06
The generated SQL (show_sql=true):
The last SQL in there is:
SELECT code0_.ID as ID0_, code0_.Versionnumber as Versionn5_0_, code0_.Identifier as Identifier0_, code0_.CodeString as CodeString0_, code0_.Timestamp as Timestamp0_, code0_.Username as Username0_, code0_.ClassificationID as Classifi3_0_, code0_.Definition as Definition0_, code0_.Revisionnumber as Revision6_0_ FROM Code code0_ WHERE code0_.ID=@p0
But in the log there is no mistake that I can find.
Debug level Hibernate log excerpt:
The log is 10 files big. I just paste the last few lines. I cannot find an error inside the log:
20:25:12.546 [4056] DEBUG NHibernate.Type.Int32Type - binding '100' to parameter: 0
20:25:12.546 [4056] INFO NHibernate.Loader.Loader - SELECT code0_.ID as ID0_, code0_.Versionnumber as Versionn5_0_, code0_.Identifier as Identifier0_, code0_.CodeString as CodeString0_, code0_.Timestamp as Timestamp0_, code0_.Username as Username0_, code0_.ClassificationID as Classifi3_0_, code0_.Definition as Definition0_, code0_.Revisionnumber as Revision6_0_ FROM Code code0_ WHERE code0_.ID=@p0
20:25:12.546 [4056] DEBUG NHibernate.SQL - SELECT code0_.ID as ID0_, code0_.Versionnumber as Versionn5_0_, code0_.Identifier as Identifier0_, code0_.CodeString as CodeString0_, code0_.Timestamp as Timestamp0_, code0_.Username as Username0_, code0_.ClassificationID as Classifi3_0_, code0_.Definition as Definition0_, code0_.Revisionnumber as Revision6_0_ FROM Code code0_ WHERE code0_.ID=@p0
20:25:12.546 [4056] DEBUG NHibernate.SQL - @p0 = '100'
20:25:12.562 [4056] DEBUG NHibernate.Impl.BatcherImpl - Opened Reader, open Readers :1
20:25:12.562 [4056] DEBUG NHibernate.Loader.Loader - processing result set
20:25:12.562 [4056] DEBUG NHibernate.Loader.Loader - result row: 100
20:25:12.562 [4056] DEBUG NHibernate.Loader.Loader - Initializing object from DataReader: 100
20:25:12.562 [4056] DEBUG NHibernate.Loader.Loader - Hydrating entity: IFCC.Model.src.persistent.Code#100
20:25:12.562 [4056] DEBUG NHibernate.Type.Int32Type - returning '2' as column: Versionn5_0_
20:25:12.562 [4056] DEBUG NHibernate.Type.StringType - returning 'AAT188' as column: Identifier0_
20:25:12.562 [4056] DEBUG NHibernate.Type.StringType - returning '20070000' as column: CodeString0_
20:25:12.562 [4056] DEBUG NHibernate.Type.DateTimeType - returning '01.01.2007' as column: Timestamp0_
20:25:12.562 [4056] DEBUG NHibernate.Type.StringType - returning 'system' as column: Username0_
20:25:12.562 [4056] DEBUG NHibernate.Type.Int32Type - returning '1' as column: Classifi3_0_
20:25:12.562 [4056] DEBUG NHibernate.Type.StringType - returning ' - empty - ' as column: Definition0_
20:25:12.562 [4056] DEBUG NHibernate.Type.Int32Type - returning '0' as column: Revision6_0_
20:25:12.562 [4056] DEBUG NHibernate.Loader.Loader - done processing result set (1 rows)
20:25:12.562 [4056] DEBUG NHibernate.Driver.NHybridDataReader - running NHybridDataReader.Dispose()
20:25:12.562 [4056] DEBUG NHibernate.Impl.BatcherImpl - Closed Reader, open Readers :0
20:25:12.562 [4056] DEBUG NHibernate.Impl.BatcherImpl - Closed IDbCommand, open IDbCommands :0
20:25:12.562 [4056] DEBUG NHibernate.Loader.Loader - total objects hydrated: 1
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - resolving associations for: [IFCC.Model.src.persistent.Code#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - creating collection wrapper:[IFCC.Model.src.persistent.Code.SearchtermReferencesCodeListOnCodeID#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - creating collection wrapper:[IFCC.Model.src.persistent.Code.ArticleReferencesCodeListOnCodeID#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - creating collection wrapper:[IFCC.Model.src.persistent.Code.CodeReferencesCodeListOnSecondID#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - creating collection wrapper:[IFCC.Model.src.persistent.Code.CodeHasSearchtermListOnCodeID#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - creating collection wrapper:[IFCC.Model.src.persistent.Code.CodeDescriptionListOnCodeID#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - creating collection wrapper:[IFCC.Model.src.persistent.Code.CodeReferencesCodeListOnFirstID#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - loading [Classification#1]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - creating collection wrapper:[IFCC.Model.src.persistent.Code.MaterialgroupReferencesCodeListOnCodeID#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - creating collection wrapper:[IFCC.Model.src.persistent.Code.ConcretionListOnCodeID#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - creating collection wrapper:[IFCC.Model.src.persistent.Code.CodeHasClassificationAttributeListOnCodeID#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - done materializing entity [IFCC.Model.src.persistent.Code#100]
20:25:12.562 [4056] DEBUG NHibernate.Impl.SessionImpl - initializing non-lazy collections
The problem I have is that I get the strange exception "identifier of an instance of IFCC.Model.src.persistent.CodeReferencesCode altered from 0X0 (IFCC.Model.src.persistent.CodeReferencesCodeCompositeID) to 0X0 (IFCC.Model.src.persistent.CodeReferencesCodeCompositeID)". How can alter 0X0 to 0X0 ? It's the same?!?
Can anyone give me a hint what I might be doing wrong?
Thank you very much