Una delle sorpese che si possono avere con nhibernate si ha quando si crea una classe con un associazione uno a molti e la si mappa con una bag o map con la strategia di fetch JOIN. Se si fa una CriteriaQuery si noterà che gli elementi vengono restituiti duplicati. Es. se io ho l'entità Ordine che ha una bag di LineaOrdine e faccio un fetch join quando vado ad esempio a fare una criteria query recuperando tutti gli ordini di una certa data, trovo ordini duplicati. Se l'ordine id X ha 10 linee ordine mi trovo 10 riferimenti all'entità ordine con id X.
Questa cosa è spiegata bene nel libro Java PErsistence With Hibernate, la soluzione è semplicissima, si deve specificare all oggetto criteria un trasformer che prende solamente i nodi root distinti.
mycriteria.SetResultTransformer(NHibernate.CriteriaUtil.DistinctRootEntity);
In questo modo nhibernate filtra i risultati e non da più duplicati ;)
Alk.