Дублированные результаты с использованием EntityGraph в случае отношения OneToMany
Я решил использовать возможности Entity Graph JPA 2.1 в моем недавно запущенном проекте, но столкнулся с проблемой.
Это хорошо, когда вы расширяете свой график на отношения ManyToOne, но для OneToMany результаты дублируются, потому что мой поставщик (Hibernate) использует левое внешнее соединение.
Я видел некоторые решения, которые они придумали с помощью ключевого слова Distinct для решения этой проблемы, но я думаю, что это сложное решение, даже несмотря на то, как мы можем получить Entity Distinct следующего уровня.
Я имею в виду, если у меня есть 3 объекта A, B и C, я буду использовать Distinct для A, а не B, где B имеет отношение OneToMany к C, тогда мы получим дублированные записи B внутри A и так далее.
1 ответ
Я понял
Когда мы добавляем Distinct в наш запрос, то, что генерируется как SQL, не оказывает никакого влияния на результат, предоставляемый из базы данных, потому что, насколько мне известно, ключевое слово Distinct действует на все столбцы, расположенные перед ним. Тогда результат (в данном случае), предоставленный из базы данных Distinct или без, будет таким же.
Но Distinct говорит JPA или его провайдеру о том, чтобы получить самые левые записи таблицы в коллекции результатов. И это тот момент, который приводит нас к тому, что мы ожидаем в результате.
Пожалуйста, если я не понял, поправьте меня