您好 在数据库中,我们有一个PRSN_ADDRESS表,它有许多地址。用户在网格中显示这些地址。要求是先显示与该用户状态关联的地址,然后显示所有其他状态。
例如,假设该表有10条记录,其中5条地址的状态为马里兰州,2条来自PA,3条来自新泽西州。现在,如果用户与马里兰州相关联,我们需要显示所有10个地址,但马里兰州的地址应该显示在前五个地址中,然后是其他5个地址。
我们正在使用Hibernate Criteria。我还没有参加过Formulas,也不确定这是否有助于解决问题。如果有人能指出我正确的方向,那将是很棒的。我很欣赏。
由于
哈里什
答案 0 :(得分:5)
您可以按条件值排序......
(NHibernate方式,任何人都知道Hibernate中的等价物吗?)
.AddOrder(Order.Asc(
Projections.Conditional(
Restrictions.EqProperty("addr.state", "user.state"), Projections.Constant(0), Projections.Constant(1))))
.AddOrder(Order.Asc("addr.state"))
转换为......
order by
case when addr.state = user.state then 0 else 1 end,
addr.state
答案 1 :(得分:4)
我确信这有一种切实可行的方法,但我最初的想法是做两个查询。首先是state == 'Maryland'
和第二state != 'Maryland'
。并将结果拼凑在一起。
可以使用HQL:
from Person p order by case when p.addr.state = 'Maryland' then '0' else '1' end asc, p.addr.state asc
我在github上准备了一个例子
https://github.com/gid79/q4510810-hibernate-criteria-order-by-a-specific-state
答案 2 :(得分:0)
哈里什,
如果我理解正确,您所要做的就是为标准添加顺序。
List addresses = sess.createCriteria(PRSN_ADDRESS.class)
.addOrder( Order.asc(user.state) )
.list();