Duplica cuando está ansioso por obtener una referencia (muchos a uno)

En primer lugar, sí, estoy usando DistinctRootEntityResultTransformer.

Tengo el siguiente mapeo (Fluido 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>

Tenga en cuenta que SecondObject hace referencia a ThirdObject (lo que significa que la clave está en SecondObject).

Mi consulta se ve así:

<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 las pruebas, tengo 1 FirstObject, 1 SecondObject, 1 ThirdObject y 24 FourthObjects en la base de datos. La consulta SQL devuelve 24 filas como se esperaba.

Sin embargo, aquí está la trampa: NHibernate crea:

<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>

Entonces, por alguna razón, NH crea 24 SecondObject en lugar de 1.

Supongo que no sabe cómo asignar "join fetch" (izquierda o interior no parece importar) a Referencia (la referencia a ThirdObject en SecondObject).

Cuáles son mis opciones ? No puedo cambiar el modelo de datos, pero necesito cargarlo todo con impaciencia.

¡Gracias por adelantado!

Respuestas a la pregunta(1)

Su respuesta a la pregunta