-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: identifier of an instance altered from 0x0 to 0x0
PostPosted: Sun Feb 04, 2007 3:31 pm 
Newbie

Joined: Mon Jan 08, 2007 11:55 am
Posts: 5
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


Top
 Profile  
 
 Post subject:
PostPosted: Sun Feb 04, 2007 4:42 pm 
Contributor
Contributor

Joined: Wed May 11, 2005 4:59 pm
Posts: 1766
Location: Prague, Czech Republic
Try implementing a more verbose ToString() in CodeReferencesCodeCompositeId, maybe then you will see the problem. Apparently you change the id of the object somewhere, after it is persisted.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Feb 05, 2007 12:25 pm 
Newbie

Joined: Mon Jan 08, 2007 11:55 am
Posts: 5
Your hint helped. In fact i didn't change the ID but I had a - very stupid - mistake in my CodeReferencesCode.cs. It said:

Code:
public Code FirstID{
set { this.m_FirstID = value; }
get { return this.m_SecondID; }


So that problem is solved. Thanks for your help!


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.