JPA 和 Hibernate 应用程序使用 HSQLDB 进行 JUnit 测试。
- HSQLDB 1.8.0
- hibernate 3.2.4.sp1
- Java 7
虽然针对 Oracle 数据库的测试运行良好,但由于我们使用的是 MSSQL 2016,因此出现以下错误:
Unexpected token: GETDATE in statement [select ..... effective_date < GETDATE() AND ... ]
所以我明白HSQL使用SYSDATE
, CURDATE
,或NOW
而不是 MSSQL GETDATE
函数,我已经完成了以下操作:
尝试设置sql.syntax_mss
通过 URL 和 SQL 语句为 true:
public static final String HYPERSONIC_JDBC_URL = "jdbc:hsqldb:mem:aname;sql.syntax_mss=true";
entityManager.createNativeQuery("set database sql syntax MSS true").executeUpdate();
在方言中注册函数和/或创建函数:
registerFunction("GETDATE", new NoArgSQLFunction("SYSDATE", new DateType()));
entityManager.createNativeQuery("CREATE FUNCTION GETDATE() RETURNS DATE RETURN CURDATE()").executeUpdate();
这些似乎都没有任何效果。
实时应用程序通过 mssql-jdbc-6.2.1.jre7 驱动程序连接到 MS SQL Server 2016。
最佳答案
因此,虽然正如 @fredt 在评论中提到的那样升级库可能是最好的路线,但升级 hsqldb.jar 会破坏 dbunit.jar,升级会破坏 .. 等等。
能够删除 GETDATE 出现并修复序列生成字符串(select next value for seq_name from seq_name
是它喜欢的格式),现在我们回到了工作状态。
升级这些库可以与升级 jBoss、Hiberate、jBPM 和 Quartz 相提并论:)
关于java - HSQLDB 意外标记 : GETDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49679027/