Hibernate order by association
Я использую Hibernate 3.2 и используя критерии для построения запроса. Я бы хотел добавить и "заказать" для ассоциации "один-к-одному", но я не вижу, как это можно сделать.
В результате запрос Hibernate выглядит следующим образом:
select t1.a, t1.b, t1.c, t2.dd, t2.ee
from t1
inner join t2 on t1.a = t2.aa
order by t2.dd <-- need to add this
Я пробовал критерии .addOrder( "assnName.propertyName" ), но он не работает. Я знаю, что это можно сделать для нормальных свойств. Я что-то пропустил?
Ответы
Ответ 1
Хорошо, нашел ответ. Я попробовал кое-что, что я не думал, что это сработает, но, к моему удивлению, это произошло. Я пытался это сделать:
Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class);
criteria.addOrder(Order.asc("assnName.propertyName"))
но на самом деле это было:
Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class);
Criteria assnCrit = criteria.createCriteria("assnName");
assnCrit.addOrder(Order.asc("propertyName"));
Я сделал предположение, что метод addOrder() использовался только по основным критериям, а не по каким-либо критериям ассоциации.
Ответ 2
У меня была одна и та же проблема, и она также может быть решена следующим образом:
Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class)
.createAlias("assnName","a")
.addOrder(Order.asc("a.propertyName"));
createAlias позволяет сохранить ваши критерии, основанные на исходном объекте (WipDiscreteJob.class в этом случае), чтобы вы могли продолжать строить свои критерии на случай, если вам это нужно (например, если вам нужен второй заказ от вашего имущества исходный объект).