/// <summary> /// Read one collection element from the current row of the ADO.NET result set /// </summary> /// <param name="optionalOwner"></param> /// <param name="optionalKey"></param> /// <param name="rs"></param> /// <param name="session"></param> private void ReadCollectionElement( object optionalOwner, object optionalKey, IDataReader rs, ISessionImplementor session ) { ICollectionPersister collectionPersister = CollectionPersister; object collectionRowKey = collectionPersister.ReadKey( rs, session ); if( collectionRowKey != null ) { if( log.IsDebugEnabled ) { log.Debug( "found row of collection: " + MessageHelper.InfoString( collectionPersister, collectionRowKey ) ); } object owner = optionalOwner; if( owner == null ) { owner = session.GetCollectionOwner( collectionRowKey, collectionPersister ); if( owner == null ) { //TODO: This is assertion is disabled because there is a bug that means the // original owner of a transient, uninitialized collection is not known // if the collection is re-referenced by a different object associated // with the current Session //throw new AssertionFailure("bug loading unowned collection"); } } PersistentCollection rowCollection = session.GetLoadingCollection( collectionPersister, collectionRowKey, rs ); if( rowCollection != null ) { rowCollection.ReadFrom( rs, collectionPersister, owner ); } } else if( optionalKey != null ) { if( log.IsDebugEnabled ) { log.Debug( "result set contains (possibly empty) collection: " + MessageHelper.InfoString( collectionPersister, optionalKey ) ); } session.GetLoadingCollection( collectionPersister, optionalKey, rs ); // handle empty collection } }
/// <summary> /// Read one collection element from the current row of the ADO.NET result set /// </summary> private void ReadCollectionElement( object optionalOwner, object optionalKey, ICollectionPersister persister, ICollectionAliases descriptor, IDataReader rs, ISessionImplementor session ) { object collectionRowKey = persister.ReadKey( rs, descriptor.SuffixedKeyAliases, session); if (collectionRowKey != null) { // we found a collection element in the result set if (log.IsDebugEnabled) { log.Debug( "found row of collection: " + MessageHelper.InfoString(persister, collectionRowKey)); } object owner = optionalOwner; if (owner == null) { owner = session.GetCollectionOwner(collectionRowKey, persister); if (owner == null) { //TODO: This is assertion is disabled because there is a bug that means the // original owner of a transient, uninitialized collection is not known // if the collection is re-referenced by a different object associated // with the current Session //throw new AssertionFailure("bug loading unowned collection"); } } IPersistentCollection rowCollection = session.GetLoadingCollection(persister, collectionRowKey, rs); if (rowCollection != null) { rowCollection.ReadFrom(rs, persister, descriptor, owner); } } else if (optionalKey != null) { // we did not find a collection element in the result set, so we // ensure that a collection is created with the owner's identifier, // since what we have is an empty collection if (log.IsDebugEnabled) { log.Debug( "result set contains (possibly empty) collection: " + MessageHelper.InfoString(persister, optionalKey)); } session.GetLoadingCollection(persister, optionalKey, rs); // handle empty collection } // else no collection element, but also no owner }