HQL 自定义订单 ASC 和 DESC

HQL custom order ASC and DESC

我有以下情况:

我有一张带有年份的账单(例如 2000 年、2001 年……),一个表示账单是否已支付的布尔值以及不同的其他值,例如人名。

我想按特定的顺序在列表中显示它们。最早的未付账单应该在最上面,最早的已付账单应该在底部。它也应该按名称排序。 喜欢:

Name   Year  PAID
Smith  2010  false
Otto   2018  false
Anon   2018  true
Hueue  2018  true
Otto   2017  true
Smith  2009  true

类似的东西...

"from Bill as b order by b.paid, b.year, b.name"

此子句将列表排序为:

Name   Year  PAID
Smith  2010  false
Otto   2018  false
Smith  2009  true
Otto   2017  true
Anon   2018  true
Hueue  2018  true

我尝试使用 HQL 实现我的目标(按案例排序...),但我不知道如何根据值以不同方式对同一行进行排序。 喜欢:(这不起作用)

" from Bill as b" +
" order by" +
" b.paid," +
" (case b.year" +
"   WHEN b.paid" +
"   THEN b.year" +
"   ELSE -b.year" +
" end)," +
" b.name"

提前感谢您的帮助。

编辑:添加了更多解释和示例...

试试这个查询:

from Bill as b
order by
    b.paid,
    case when b.paid = 'false' then b.year else -b.year end,
    b.name

这是通过首先将未付帐单记录放在已付记录之前来实现的。对于第一个排序条件,我们不需要使用 case 表达式,因为 falsetrue 之前排序。对于年份顺序,我们确实需要一个 case 表达式。在这里,我们对未付账单按年份升序排序,对已付账单按年份降序排序。