У меня есть такая объектная модель:
class EntityA
{
...
IList<EntityB> BList;
...
}
class EntityB
{
...
IList<EntityC> CList;
}
Мне нужно получить все наборы (Blist в EntityA и CList в EntityB), потому что, если все они понадобятся для выполнения некоторых операций, если я не буду загружать их, у меня будет проблема выбора n + 1.
Итак, запрос был такой:
select a from EntityA a left join fetch a.BList b left join fetch b.CList c
Первая проблема, с которой я столкнулся в этом запросе, заключалась в возврате дубликатов из БД, у меня были дубликаты EntityA из-за выборки левого соединения с BList.
Быстро прочитав документацию по hibernate, было найдено несколько решений, во-первых, я попробовал отдельное ключевое слово, которое предположительно не будет реплицировать ключевое слово SQL, за исключением некоторых случаев, возможно, это был один из тех случаев, потому что у меня была ошибка SQL, говорящая, что я невозможно выбрать текстовые столбцы округа (столбец [Наблюдения] в таблице EntityA). Поэтому я использовал одно из других решений:
query.SetResultTransformer(new DistinctRootEntityResultTransformer());
Это сработало нормально. Но результат операций все еще не прошел испытания. Я проверил дальше и обнаружил, что теперь есть дубликаты EntityB из-за левого соединения с CList.
Вопрос в том, как я могу использовать отличное в коллекции второго уровня? Я искал и нашел только решения для прямой дочерней коллекции корневого объекта, но не для дочерних коллекций второго уровня ...
Спасибо за ваше время