Bug with Flush() command in NHibernate 3.3.1

164 views
Skip to first unread message

MattO

unread,
Jul 2, 2012, 12:52:47 PM7/2/12
to nhu...@googlegroups.com
I just upgraded to 3.3.1 from 2.1.2 and seem to have stumbled upon a bug.  Some of my unit tests are now failing.  Not sure how to fix it other then reverting back to 2.1.2.
 
When doing a flush I get an unable to cast ojbect of type 'System.Object' to type 'System.String' in a few of my entitys:
 
Test 'ItemBank.UnitTests.ExamSelectionTests.Delete' failed: System.InvalidCastException : Unable to cast object of type 'System.Object' to type 'System.String'. 
at NHibernate.Type.AbstractStringType.ToString(Object val) 
at NHibernate.Type.NullableType.ToLoggableString(Object value, ISessionFactoryImplementor factory) 
at NHibernate.Impl.Printer.ToString(Object entity, EntityMode entityMode) 
at NHibernate.Impl.Printer.ToString(IEnumerator enumerator, EntityMode entityMode) 
at NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions(FlushEvent event) 
at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event) 
at NHibernate.Impl.SessionImpl.Flush()

Anyone see this before?

MattO

unread,
Jul 2, 2012, 1:56:51 PM7/2/12
to nhu...@googlegroups.com
I figured out what this was. 
 
In my HBM mapping files I had a lot of references back to this class as follows:
 
 
Well it turns out higher up was actually pointing me in the general direction of the issue:
 
Test 'ItemBank.UnitTests.ExamTypeTests.Create' failed: NHibernate.PropertyValueException : not-null property references a null or transient value ItemBank.BusinessObjects.ExamType._ItemBank.BusinessObjects.Item.ExamTypesBackref
 at NHibernate.Engine.Nullability.CheckNullability(Object[] values, IEntityPersister persister, Boolean isUpdate)
 at NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
 at NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object entity, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
 at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
 at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)
 at NHibernate.Event.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)
 at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event)
 at NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event)
 at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
 at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event)
 at NHibernate.Impl.SessionImpl.Save(Object obj)
 C:\Visual Studio Projects\NHibernate Class Library\ARRT.NH\Data\NHibernateRepository.cs(76,0): at ARRT.NH.Data.NHibernate.NHibernateRepositoryWithTypedId`2.Save(T entity)
 UnitTests\ExamTypeTests.cs(61,0): at ItemBank.UnitTests.ExamTypeTests.Create()
 
That not-null property was what was causing the issue.  If I go and look at the class in question ("Item") I seen the following:

 

    <bag name="ExamTypes" lazy="true" cascade="none">
      <!--property-ref is refering to this objects type column, if we omit this it defaults to the Id property which is the RecordID which
            is not what we want.  Removed not-null="true" as I was getting not-null property references a null or transient value error-->
      <key column="Type" property-ref="Type" not-null="true" on-delete="noaction" update="false"></key>
      <one-to-many class="ExamType" />
    </bag>

After removing the not-null="true" on the above statement it worked just fine.

Reply all
Reply to author
Forward
0 new messages