通过使用列值进行休眠和排序

时间:2009-12-18 06:54:12

标签: java hibernate

有没有办法可以使用hibernate条件api来解决下面的查询(按顺序排序)?

select * from table where first_name like 'bar%' order by first_name like 'bar%' desc

4 个答案:

答案 0 :(得分:3)

您无法轻松将此查询映射到Criteria API,因为Order类仅支持属性名称/别名而不支持表达式。

但是,您可以尝试以下方法之一:

  1. 如果底层数据库支持您尝试在SELECT子句中排序的表达式,则可以使用某些别名定义Projection(取决于您可能必须使用的表达式{ {1}}这样做)然后按该别名排序。

  2. 否则,您可以扩展Projections.sqlProjection()类并覆盖其Order方法,以根据需要生成SQL。请注意,不要让它在不同的数据库中不可移植。

  3. P.S。为了解决上面的一些注释,我很确定toSqlString()是ANSI SQL标准(不能100%肯定,但看看它是如何不公开的)。它当然是事实上的标准 - 它受到最新的MySQL / PostgreSQL / Oracle / SQL Server版本的支持。

答案 1 :(得分:0)

我相信你只是在寻找order by first_name desc ...

答案 2 :(得分:0)

这可以使用条件API的addOrder方法完成:

List<Customer> result=(List<Customer>) session.createCriteria(Customer.class)
                           .add(Restrictions.like("firstName", "bar%"))
                           .addOrder(Order.desc("firstName"))
                           .list();

点击此处:

Hibernate Criteria Api

答案 3 :(得分:0)

您可以执行以下操作:

cachedCriteria.add(Restrictions.sqlRestriction("1=1 order by " + your_expression_here);

sqlRestriction的工作方式如下 - 它将AND添加到查询的末尾并插入表达式。