Duplikate beim eifrigen Abrufen einer Referenz (viele-zu-eins)

Zuallererst, ja, ich verwende DistinctRootEntityResultTransformer.

Ich habe das folgende Mapping (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>

Beachten Sie, dass SecondObject auf ThirdObject verweist (dh der Schlüssel befindet sich in SecondObject).

Meine Anfrage sieht so aus:

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

Zum Testen habe ich 1 FirstObject, 1 SecondObject, 1 ThirdObject und 24 FourthObjects in der Datenbank. Die SQL-Abfrage gibt wie erwartet 24 Zeilen zurück.

Hier ist jedoch der Haken: NHibernate erstellt:

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

Also erzeugt NH aus irgendeinem Grund 24 SecondObject anstelle von 1.

Ich vermute, es weiß nicht, wie man "join fetch" (links oder inner scheint keine Rolle zu spielen) auf Reference (die Referenz auf ThirdObject in SecondObject) abbildet.

Welche Möglichkeiten habe ich? Ich kann das Datenmodell nicht ändern, muss aber unbedingt alles laden.

Danke im Voraus!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage