Дублирование с использованием левой выборки

Я использую HQL-запрос для получения определенных записей. Если я использую LEFT JOIN FETCH, коллекция, которая находится в моем целевом объекте, будет содержать повторяющиеся записи. Если я использую только левое соединение, этого не произойдет. Я думаю, когда Hibernate лениво загружает записи, он избегает дубликатов.

"SELECT z FROM ", TableA.TABLE_NAME, " z ",  //
            "LEFT JOIN FETCH z.attributeX pv ", //
            "LEFT JOIN FETCH pv.attributeY anteil ", //
            "LEFT JOIN FETCH z.attributeB kma ", //
            "LEFT JOIN FETCH kma.attributeC ", //
            "WHERE anteil.attributeD.attributeE.id = :eId ", //
            "AND pv.attributeG.id = :gId ");

Моя сущность TableAимеет ссылку на TablePV( LEFT JOIN FETCH z.attributeX pv)

TablePVимеет коллекцию TableY( LEFT JOIN FETCH pv.attributeY anteil)

Теперь Hibernate будет правильно отображать все, кроме дочерних элементов TablePV. Он будет содержать несколько раз одну и ту же запись. Отличие в TableAне помогает, так как там нет дубликатов. Я мог бы вручную удалить те записи, которые, я думаю, были бы совершенно неэффективными.

11
задан Dherik 19 December 2018 в 23:34
поделиться