我正在使用jpa 3.o和Hibernate。我有一个命名查询:
SELECT COUNT(wt.id) FROM WPSTransaction wt WHERE wt.createdDate>= CURRENT_DATE
WPSTransaction是我的实体类,createdDate是我班级中的一列。
它在Mysql数据库中运行良好。但是,我正在转向SQL Server 2012,SQL服务器似乎没有编译CURRENT_DATE
值。我尝试了GETNOW()
和NOW()
方法以及current_date()
方法和CURRENT_TIMESTAMP
但没有任何运气。
答案 0 :(得分:2)
MS SQL Server fails to conform to the standard此处 - 它不提供current_date
关键字。
您必须使用特定于SQL服务器的GETDATE()
函数,因为链接的文档显示。
由于current_date
是规范中的关键字,因此您不能仅在MS SQL中创建用户定义的current_date()
函数,并期望它的工作方式相同。所以很遗憾,你在这里遇到了特定于数据库的代码。
答案 1 :(得分:1)
在MS SQL中返回当前日期的函数是GETDATE(),因此您的查询应该是
SELECT COUNT(wt.id) FROM WPSTransaction wt WHERE wt.createdDate >= GETDATE()
答案 2 :(得分:1)
怎么样:
Query q = entityManager.createQuery("SELECT COUNT(wt.id) FROM WPSTransaction wt WHERE wt.createdDate>= :d");
q.setParam("d", new Date());
不需要特定于数据库的代码。