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)
有人可以告诉我可能的替代方案吗?
答案 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函数。