2012-06-10 5 views
3

У меня есть таблица dept и таблица emp. Таблица dept имела отношение «один ко многим» с emp table w.r.t deptId.Спящий режим: повторение в FetchMode.JOIN

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

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 есть повторение. Но я не хочу, чтобы эти повторения появлялись. Как избежать повторения в спящем сгенерированном запросе?

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

С уважением,

+0

Добавить эмблему. Кажется, у вас есть формула –

+0

В настоящее время нет способа удалить их. Они происходят из ассоциативных сопоставлений. Но почему вас это волнует? –

ответ

2

Там несколько обходных путей к этому:

  1. Вы можете добавить свои элементы в HashSet или LinkedHashSet - которые будут удалить дубликаты или
  2. Вы можете попробовать использовать другой режим выборки. См. Эту ссылку для получения подробной информации о режимах выборки here - У меня были довольно хорошие результаты, используя SUBSELECT.