Hibernate不支持oracle的TIMESTAMPDIFF

时间:2012-09-26 12:13:45

标签: hibernate jpa-2.0

Hibernate不支持Oracle的TIMESTAMPDIFF

它在Oracle中出错,但在MySql中运行得非常好

**Query** :select app from Application app where app.id not in ( select aml.referenceId from AuditMailLog aml  where app.id = aml.referenceId and aml.event = 'application_expiry_reminder' and aml.referenceTableName = 'application' ) and TIMESTAMPDIFF(DAY, created_date, CURRENT_TIMESTAMP()) >= 30 and status in (0,1)

有人可以告诉我可能的替代方案吗?

2 个答案:

答案 0 :(得分:0)

这是因为Oracle本身不支持timestampdiff()函数。

timestampdiff()在许多数据库中可用,但Oracle,DB2或Postgres均不可用。

即使JDBC specification列出了timestampdiff()的功能,它也极力主张JDBC驱动程序应通过转义语法即{fn timestampdiff(x,y,z)}来支持,但不幸的是,实际上对这些功能的支持非常零散。

在Oracle中解决此问题的方法是使用-运算符减去时间戳记,产生一个间隔,然后使用extract()函数将其字段分开。

这里有更多信息:

https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#BABBICGH

答案 1 :(得分:-1)

您可以使用DetachedCriteria进行查询,使用Restrictions.sqlRestriction进行SQL函数。