Хорошо, это больше всего похоже на (еще одну) ошибку/нереализованную функциональность в Hibernate.
Можно ли отобразить ассоциацию Set
таким образом, чтобы соблюдалось предложение "order by"
в HQL?
Например, у вас есть 2 сущности: PageEntity
и QuestionEntity
. Страница имеет Set.
Как заставить работать следующий HQL:
from
PageEntity p
left outer join fetch p.questionEntities q
order by
q.orderIndex
Чего я не хочу:
- использовать сортировку в Java (у нас есть «упорядочение по» в SQL, поэтому нам не нужно этого делать!). SortedSet, компараторы и т. д. не могут быть и речи
- чтобы отобразить его как список с
<list-index>
. Это добавит «порядок» ко всем SQL-запросам, и я не хочу этого - использовать
<set order-by="orderIndex">
, потому что, опять же, это будет применяться ко всем запросам
При отладке я вижу, что используемая реализация Set — это org.hibernate.collection.PersistentSet
, которая обертывает Set
. Реализация обернутого Set
— это HashSet
. Я ожидаю, что Hibernate будет достаточно умен, чтобы использовать вместо этого LinkedHashSet
, чтобы он мог соблюдать мое предложение HQL «order by
».