5

我有一个查询将变得非常复杂,我们想将其切换到 Criteria API 以使其易于管理。我们基本上选择一些匹配过滤器的数据,但根据匹配的过滤器数量对结果集进行排序。我们通过在 select 子句中添加一个字段来跟踪匹配的过滤器数量来做到这一点。

一个例子会很有帮助:

http://sqlfiddle.com/#!4/90e02/2

有没有办法使用 Hibernate Criteria API 来做到这一点。我们的目标是确保这不会成为创建我们必须维护的大型 HQL 字符串的代码。

我不一定需要一个例子作为答案(虽然那会很棒!)但是一个是/否和一些可以告诉我如何完成它的东西会起作用。

4

3 回答 3

2

是的,它可以做到。是构建SQL CASE表达式的 API。

这是一些伪代码:

CriteriaBuilder cb = ...
javax.persistence.criteria.Expression rankExpression = 
        cb.sum(
              cb.selectCase().when(first_name = 'Carter',1).otherwise(0),
              cb.sum(cb.selectCase().when(last_name = 'Mason',1).otherwise(0),
                     cb.sum(...)
                     )
              );
于 2013-11-05T22:49:11.130 回答
0

您可以使用@Formula注释并在那里放置字段(CASE WHEN ... END)表达式。rank

于 2013-11-05T22:21:34.477 回答
0

我找到了另一种方法来实现这一点:

http://blog.tremend.ro/2008/06/10/how-to-order-by-a-custom-sql-formulaexpression-when-using-hibernate-criteria-api/

于 2013-11-26T16:53:49.440 回答