有没有办法可以使用hibernate条件api来解决下面的查询(按顺序排序)?
select * from table where first_name like 'bar%' order by first_name like 'bar%' desc
答案 0 :(得分:3)
您无法轻松将此查询映射到Criteria API,因为Order
类仅支持属性名称/别名而不支持表达式。
但是,您可以尝试以下方法之一:
如果底层数据库支持您尝试在SELECT
子句中排序的表达式,则可以使用某些别名定义Projection(取决于您可能必须使用的表达式{ {1}}这样做)然后按该别名排序。
否则,您可以扩展Projections.sqlProjection()
类并覆盖其Order
方法,以根据需要生成SQL。请注意,不要让它在不同的数据库中不可移植。
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();
点击此处:
答案 3 :(得分:0)
您可以执行以下操作:
cachedCriteria.add(Restrictions.sqlRestriction("1=1 order by " + your_expression_here);
sqlRestriction的工作方式如下 - 它将AND添加到查询的末尾并插入表达式。