Hibernate: повторение в FetchMode.JOIN

У меня есть таблица отдела и таблица emp. Таблица dept имела отношение «один ко многим» с таблицей emp по отношению к deptId.

Когда я попробовал этот код:

session.createCriteria(Dept.class).setFetchMode("empMap", FetchMode.JOIN)
       .list();

Это сгенерированный вывод в моей консоли для запроса sql, сгенерированного спящим режимом:

select this_.DEPT_ID as DEPT1_1_1_, this_.DEPT_NAME as DEPT2_1_1_, 
empmap2_.DEPT_ID as DEPT3_3_, empmap2_.EMP_ID as EMP1_3_, 
empmap2_.EMP_ID as formula0_3_, empmap2_.EMP_ID as EMP1_0_0_, 
empmap2_.EMP_NAME as EMP2_0_0_, empmap2_.DEPT_ID as DEPT3_0_0_, 
empmap2_.AGE as AGE0_0_, empmap2_.SEX as SEX0_0_ 
from dept this_, emp empmap2_ 
where this_.DEPT_ID=empmap2_.DEPT_ID(+)

В сгенерированном запросе гибернации я ясно вижу, что в столбцах таблицы emp есть повторения. Но я не хочу, чтобы эти повторы появлялись. Как тогда избежать повторения в сгенерированном запросе гибернации?

Подскажите, пожалуйста, как убрать эти повторы.

С уважением,


person user182944    schedule 10.06.2012    source источник
comment
Добавьте отображение emp. Кажется, у вас есть формула там   -  person Avihai Marchiano    schedule 19.08.2012
comment
В настоящее время нет способа удалить их. Они происходят из ассоциативных отображений. Но почему тебя это волнует?   -  person Steve Ebersole    schedule 20.09.2012


Ответы (1)


Есть несколько обходных путей:

  1. Вы можете добавить свои элементы в HashSet или LinkedHashSet, что удалит дубликаты или
  2. Вы можете попробовать использовать другой режим выборки. Подробнее о режимах выборки см. по этой ссылке здесь. были довольно хорошие результаты, используя SUBSELECT.
person ifx    schedule 19.09.2012