| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Hibernate DetachedCriteria - дублируются записи |
| Автор: brejnev 10.1.2008, 16:16 | ||||||
| Разбираюсь с критериями в Hibernate3. Создаю DetachedCriteria, делаю выборку. В итоге - набор дублирующихся сущностей, причем в БД все записи уникальны. Дублирование идет как-попало и от чего зависит так и не понял. В результяте упрощения запроса остался такой код:
QuestionnairePerson
В гугле смотрел, так и не поборол баг. Работает все нормально если задать такую штуку
Но мне это не нравится, что-то тут не так. |
| Автор: ibodrov 10.1.2008, 18:41 |
| Дело не в DetachedCriteria. Посмотрите, какой SQL генерит Hibernate ("hibernate.show_sql"), наверняка там будут дублирующиеся записи из-за JOIN'ов. |
| Автор: brejnev 10.1.2008, 20:49 | ||
Хм, завтра на работу приду, попробую..... Поведение похоже на join, но откуда ему там взяться? Неужели hibernate присоединяет все связанные таблицы |
| Автор: brejnev 11.1.2008, 08:31 | ||
Вот такой sql-код генерит хитбернейт-критерий в первом посте. Как ему сказать, чтобы он не соединял join-ом таблицы? Мне всего-лишь надо выбрать сущности из одой таблицы. |
| Автор: iluvatar 11.1.2008, 15:58 | ||||||||
| насколько помню у Criteria нет какого-либо вменяемого решения distinct-проблемы сам когда-то задавался подобным вопросом. как временный вариант тогда выбрал такой метод: сначала выбираем ТОЛЬКО id:
а потом по списку id получаем те записи какие хотим. НО! если существует какой-либо order by, то все поля по которым идет сортировка необходимо указать в projectionList():
получаем список полей, вручную получаем список ТОЛЬКО из первых элементов списка (только id), по id получаем список записей. Есть еще один вариант с ипсользованием Criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY), но этоот способ выполняет distinct ПОСЛЕ выполнения запроса, т.е. средствами не БД, а Hibernate, что не подходит если осуществляется постраничное ранжирование. Кстати, это была одна из причин перехода на HQL, чего и вамсоветую. Добавлено через 2 минуты и 31 секунду
насчет подключения вложенных таблиц отвечают lazy и fetch в мэппинге. |
| Автор: mariyasmirnova01 24.9.2015, 11:55 |
| Мне помогла статья http://novainfo.ru/archive/3/poisk-dubliruyushchegosya-koda |