Duplica quando ansioso por buscar uma referência (muitos para um)
Primeiro de tudo, sim, estou usando o DistinctRootEntityResultTransformer.
Eu tenho o mapeamento a seguir (Fluent NHibernate):
<code>public FirstObjectMap() { Id(x => x.Id): HasMany<SecondObject>(x => x.SecondItems).KeyColumn("FirstObject_ID"); } public SecondObjectMap() { Id(x => x.Id).Column("ID"); References(x => x.ThirdObject).Column("ThirdObject_ID"); } public ThirdObjectMap() { Id(x => x.Id).Column("ID"); HasMany<D>(x => x.FourthItems).KeyColumn("ThirdObject_ID"); } public FourthObjectMap() { Id(x => x.Id).Column("ID"); } </code>
Observe que SecondObject se refere a ThirdObject (significando que a chave está em SecondObject).
Minha consulta é assim:
<code>var query = session.CreateQuery("select distinct first from " + "FirstObject as first " + "left join fetch first.SecondItems as second " + "left join fetch second.ThirdObject as third " + "left join fetch third.FourthItems as four where ..."); // This is not even needed as I'm using distinct in HQL query.SetResultTransformer(new DistinctRootEntityResultTransformer()); var results = query.List<ReinsurableObject>(); </code>
Para testes, eu tenho 1 FirstObject, 1 SecondObject, 1 ThirdObject e 24 FourthObjects no banco de dados. A consulta SQL retorna 24 linhas conforme especificado.
No entanto, aqui está o problema: o NHibernate cria:
<code>1 FirstObject 24 SecondObject (should be 1) 24 x 1 ThirdObject (should be 1) 24 x 1 x 24 FourthObject (should be 24) </code>
Então, por qualquer razão, o NH cria 24 SecondObject em vez de 1.
Eu estou supondo que não sabe como mapear "join fetch" (esquerda ou interna não parece importar) para referência (a referência a ThirdObject em SecondObject).
Quais são minhas opções? Eu não posso mudar o modelo de dados, mas preciso carregar tudo isso.
Desde já, obrigado!