|
Модераторы: LSD, AntonSaburov |
|
brejnev |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 94 Регистрация: 18.9.2005 Репутация: нет Всего: нет |
Разбираюсь с критериями в Hibernate3.
Создаю DetachedCriteria, делаю выборку. В итоге - набор дублирующихся сущностей, причем в БД все записи уникальны. Дублирование идет как-попало и от чего зависит так и не понял. В результяте упрощения запроса остался такой код:
QuestionnairePerson
В гугле смотрел, так и не поборол баг. Работает все нормально если задать такую штуку
Но мне это не нравится, что-то тут не так. |
||||||
|
|||||||
ibodrov |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.9.2005 Репутация: нет Всего: нет |
Дело не в DetachedCriteria.
Посмотрите, какой SQL генерит Hibernate ("hibernate.show_sql"), наверняка там будут дублирующиеся записи из-за JOIN'ов. |
|||
|
||||
brejnev |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 94 Регистрация: 18.9.2005 Репутация: нет Всего: нет |
Хм, завтра на работу приду, попробую..... Поведение похоже на join, но откуда ему там взяться? Неужели hibernate присоединяет все связанные таблицы |
|||
|
||||
brejnev |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 94 Регистрация: 18.9.2005 Репутация: нет Всего: нет |
Вот такой sql-код генерит хитбернейт-критерий в первом посте. Как ему сказать, чтобы он не соединял join-ом таблицы? Мне всего-лишь надо выбрать сущности из одой таблицы. |
|||
|
||||
iluvatar |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 266 Регистрация: 17.9.2007 Репутация: 4 Всего: 4 |
насколько помню у Criteria нет какого-либо вменяемого решения distinct-проблемы
сам когда-то задавался подобным вопросом. как временный вариант тогда выбрал такой метод: сначала выбираем ТОЛЬКО id:
а потом по списку id получаем те записи какие хотим. НО! если существует какой-либо order by, то все поля по которым идет сортировка необходимо указать в projectionList():
получаем список полей, вручную получаем список ТОЛЬКО из первых элементов списка (только id), по id получаем список записей. Есть еще один вариант с ипсользованием Criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY), но этоот способ выполняет distinct ПОСЛЕ выполнения запроса, т.е. средствами не БД, а Hibernate, что не подходит если осуществляется постраничное ранжирование. Кстати, это была одна из причин перехода на HQL, чего и вамсоветую. Добавлено через 2 минуты и 31 секунду
насчет подключения вложенных таблиц отвечают lazy и fetch в мэппинге. |
||||||||
|
|||||||||
mariyasmirnova01 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 21.8.2015 Репутация: нет Всего: нет |
||||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |