Nhibernate: distinct results in second level Collection

Posted by Miguel Marques on Stack Overflow See other posts from Stack Overflow or by Miguel Marques
Published on 2010-02-07T18:39:02Z Indexed on 2010/03/29 22:03 UTC
Read the original article Hit count: 495

I have an object model like this:

   class EntityA
   {
        ...
        IList<EntityB> BList;
        ...
   }

   class EntityB
   {
       ...
       IList<EntityC> CList;
   }

I have to fetch all the colelctions (Blist in EntityA and CList in EntityB), because if they all will be needed to make some operations, if i don't eager load them i will have the select n+1 problem. So the query was this:

  select a from EntityA a left join fetch a.BList b left join fetch b.CList c

The fist problem i faced with this query, was the return of duplicates from the DB, i had EntityA duplicates, because of the left join fetch with BList. A quick read through the hibernate documentation and there were some solutions, first i tried the distinct keyword that supposelly wouldn't replicate the SQL distinct keyword except in some cases, maybe this was one of those cases because i had a SQL error saying that i cannot select distict text columns (column [Observations] in EntityA table). So i used one of the other solutions:

  query.SetResultTransformer(new DistinctRootEntityResultTransformer());

This worked fine. But the result of the operations were still not passing the tests. I checked further and i found out that now there were duplicates of EntityB, because of the left join fetch with CList.

The question is, how can i use the distinct in a second level collection? I searched and i only find solutions for the root entity's direct child collection, but never for the second level child collections...

Thank you for your time

© Stack Overflow or respective owner

Related posts about nhibernate

Related posts about hql