У меня есть некоторые проблемы с Hibernate (JPA), PostgreSQL и упорядочением.Java Hibernate ManyToOne Ordering
К примеру, у нас есть две таблицы (сопоставленные лиц):
- Pets (id (id), PetTypes (types_id), description (description))
- PetTypes (id (id), name (name))
type_id поле не требуется (ограничение на pet_types таблицу).
Например, у нас есть 10 строк в таблице домашних животных (в 1, 2 и 3 строках type_id равно null). Мне нужно заказать таблицу домашних животных pet_types.name с использованием критериев HQL или JPA (но я думаю, что это не поддерживается JPA).
Проблема: значения из таблицы домашних животных не выбираются с заказом, если type_id равно null. Я могу попытаться использовать следующие решения:
- ИЗ Домашних животных Домашних животных ORDER BY pets.petTypes.name ASC NULLS ПОСЛЕДНЕЙ
- ОТ Домашних животных Домашних животных ORDER BY СЛУЧАЯ КОГДА pets.petTypes IS NULL THEN 0 ELSE 1 END , ORDER BY pets.petTypes.name ASC NULLS LAST
- ОТ Домашние животные ORDER BY случае, когда pets.petTypes.name IS NULL THEN 0 ELSE 1 END, ORDER BY pets.petTypes.name ASC NULLS LAST
- от домашних животных домашних животных LEFT JOIN pets.petTypes ORDER BY pets.petTypes.name ASC NULLS LAST
- FROM Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные Домашние животные ЗАКАЗАТЬ pets.petTypes.name ASC
Но ничего не работает. После выбора у нас 7 вместо 10 строк. Есть идеи? Я не могу использовать инструкцию UNION
через HQL. Он открыт Hibernate bug с 2005
EDIT
Thx к Rodrigo Menezes. Это решение работает:
select p from Pets p left join p.petTypes pt order by case when pt is null then 0 else 1 end, pt.name
Может быть, вам нужно два порядка (не конечно). Потому что «pets.petTypes» имеет значение null, а не pets.petTypes.name или? что-то вроде ORDER BY pets.petTypes ASC NULLS LAST, pets.petTypes.names ASC – pL4Gu33
Да, я попытался использовать этот метод. Ничего не работает. Я обновляю вопрос выше. –
Порядок сортировки не должен влиять на количество строк. Можете ли вы опубликовать исходный SQL-дамп? – dfb