Tips and Tricks in a world of Mix

Posts tagged ‘HasMany’

Fluent Nhibernate – fail-safe cleanup (collections) warning

 

My mapping was in CustomerMutzar :

  HasMany<CustomerMutzarKishur>(x => x.Col_CustomerMutzarKishur)
                 .Access
                 .Property()
                 .AsSet()
                 .KeyColumn("CMK_CMU_RECID")
                 .Cascade
                 .All().LazyLoad().Fetch.Join().Inverse();

 

Class Diagram of my entity model was :

The mistake I’ve got in NHibernate Profiler :

it does the select query :

SELECTFROM   CUSTOMER_MUTZAR customermu0_
       left outer join CUSTOMER_MUTZAR_KISHUR col_custom1_
         on customermu0_.CMU_RECID = col_custom1_.CMK_CMU_RECID
       left outer join CUSTOMER_MUTZAR_PRODUCT customermu2_
         on col_custom1_.CMK_CMP_RECID = customermu2_.CMP_RECID
WHERE  customermu0_.CMU_RECID = 450 /* :p0 */

 

 
and then I get few problematic statements in profiler :

WARN:
fail-safe cleanup (collections) : NHibernate.Engine.Loading.CollectionLoadContext<rs=System.Data.OracleClient.OracleDataReader>

WARN:
On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries

and a system crash from log  :

StackTrace: NHibernate.PropertyAccessException: Invalid Cast (check your mapping for property type mismatches); setter of Ness.DoarKamuti.Infrastructure.Entities.CustomerMutzar —> System.InvalidCastException: Unable to cast object of type ‘NHibernate.Collection.Generic.PersistentGenericSet`1[Ness.DoarKamuti.Infrastructure.Entities.CustomerMutzarKishur]’ to type ‘System.Collections.Generic.IList`1[Ness.DoarKamuti.Infrastructure.Entities.CustomerMutzarKishur]’.
   at (Object , Object[] , SetterCallback )

The Solution :

I went again to the mapping of the entity and adjusted the relationships :

 

 HasMany<CustomerMutzarKishur>(x => x.Col_CustomerMutzarKishur).AsBag()
                .KeyColumn("CMK_CMU_RECID")
                .LazyLoad().Fetch.Join().Inverse();

This has resolved the issue for me.

 

Fluent NHibernate HasMany PropertyRef solution

For a long time tried to find the solution for HasMany relationship not through ID property of the entity .
Starting from Fluent NHibernate build 164 there is a way , no patches included –
HasMany(x => x.Collection_TChild).AsBag()
.KeyColumn(“CHILDPROPERTY_TOJOINBY”)
.PropertyRef(“Parent_Property”);

p.s.
Crazy thing , after including the FNH.dll of 164 version , we were compelled to add
column property to the Mapping . So , it means that we went through all our mappings
and added

Map(x => x.Property).Column(“PropertyNameAsItAppearsInOracleDataBase”);

otherwise the NHibernate didn’t recognized the mappings…

Tag Cloud

%d bloggers like this: