Дубликаты при поиске ссылки (многие-к-одному)

Прежде всего, да, я использую DistinctRootEntityResultTransformer.

У меня есть следующее (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>

Обратите внимание, что SecondObject ссылается на ThirdObject (это означает, что ключ находится во SecondObject).

Мой запрос выглядит так:

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

Для тестирования у меня есть 1 FirstObject, 1 SecondObject, 1 ThirdObject и 24 FourthObjects в базе данных. Запрос SQL возвращает 24 строки в соответствии с ожиданиями.

Однако здесь есть одна загвоздка: NHibernate создает:

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

Так что NH по какой-либо причине создает 24 SecondObject вместо 1.

Я предполагаю, что он не знает, как сопоставить "присоединиться к извлечению" (левый или внутренний не имеет значения) для Reference (ссылка на ThirdObject в SecondObject).

Какие у меня варианты? Я не могу изменить модель данных, но мне действительно нужно все это загрузить.

Заранее спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос