使用Hibernate Criteria的复杂表达式(如“isnull(retryCount,0)< 3”)

时间:2012-08-09 20:07:43

标签: java hibernate criteria-api

我有一些像

这样的查询
SELECT * FROM JobTable 
WHERE isnull(retryCount,0)<3 
AND updatedOn < dateadd(MI,-5,getdate())

如何将其转换为Criteria api调用?指向使用标准是允许重构字段名称将被更改。

对于简单的事情,这看起来像

criteria.add(Restrictions.lt(JobTable.RETRYCOUNT_FULL, 3));

但我的情况呢?

criteria.add(Restrictions.lt(JobTable.UPDATEON_FULL, <???>);
criteria.add(Restrictions.lt( <someexpression(JobTable.RETRYCOUNT_FULL)> , 3));

2 个答案:

答案 0 :(得分:0)

我不确定正确的名称,但是hibernate有一些标准函数映射到方言函数。它们可以像这样使用

Projections.sqlFunction("dateadd", Projections.property("property"), Hibernate.dateTime);

答案 1 :(得分:0)

Hibernate Criteria API具有Restrictions.sqlRestriction个函数。在这些函数中,您可以按照自己喜欢的方式编写SQL,并将Hibernate嵌入到SQL中。

criteria.add(Restrictions.sqlRestriction("isnull({alias}" + JobTable.RETRYCOUNT_FULL + ", 0) < ?", 3, new IntegerType());