JPA& Hibernate应用程序使用HSQLDB进行JUnit测试。
虽然测试对Oracle数据库工作正常,但是现在我们正在使用MSSQL 2016时出现以下错误:
Unexpected token: GETDATE in statement [select ..... effective_date < GETDATE() AND ... ]
因此,我了解HSQL使用SYSDATE
,CURDATE
或NOW
代替MSSQL GETDATE
函数,我已完成以下操作:
尝试通过URL和SQL语句将sql.syntax_mss
设置为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();
在Dialect中注册该功能和/或创建一个功能:
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.
答案 0 :(得分:0)
因此,虽然在评论中提到的@fredt升级库可能是最佳途径,但升级hsqldb.jar会破坏dbunit.jar,升级会中断...等等。
能够删除GETDATE事件并修复序列生成字符串(select next value for seq_name from seq_name
是它喜欢的格式),现在我们又回到了工作状态。
升级这些库可以放入桶中,升级jBoss,Hiberate,jBPM和Quartz:)