hibernate order by association

假装没事ソ 提交于 2019-12-03 17:35:42

问题


I'm using Hibernate 3.2, and using criteria to build a query. I'd like to add and "order by" for a many-to-one association, but I don't see how that can be done. The Hibernate query would end up looking like this, I guess:

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

I've tried criteria.addOrder("assnName.propertyName") but it doesn't work. I know it can be done for normal properties. Am I missing something?


回答1:


Ok, found the answer. I tried something that I didn't think would work, but to my surprise did. I was trying this:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class);

criteria.addOrder(Order.asc("assnName.propertyName"))

but what actually worked was:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class);
Criteria assnCrit = criteria.createCriteria("assnName");

assnCrit.addOrder(Order.asc("propertyName"));

I had made the assumption that the addOrder() method was only usable on the main criteria and not on any association criteria.




回答2:


I was having the same issue and it can also be solved like this:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class)
  .createAlias("assnName","a")
  .addOrder(Order.asc("a.propertyName"));

createAlias lets you keep your criteria rooted on your original entity (WipDiscreteJob.class in this case) so that you can keep building your criteria up in case you needed it (for example, if you need a second order by property from you original entity).



来源:https://stackoverflow.com/questions/870029/hibernate-order-by-association

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!