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 в этом случае), чтобы вы могли продолжать строить свои критерии на случай, если вам это нужно (например, если вам нужен второй заказ от вашего имущества исходный объект).