HSQLDB意外的令牌:GETDATE

时间:2018-04-05 18:22:24

标签: java hibernate hsqldb

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使用SYSDATECURDATENOW代替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.

1 个答案:

答案 0 :(得分:0)

因此,虽然在评论中提到的@fredt升级库可能是最佳途径,但升级hsqldb.jar会破坏dbunit.jar,升级会中断...等等。

能够删除GETDATE事件并修复序列生成字符串(select next value for seq_name from seq_name是它喜欢的格式),现在我们又回到了工作状态。

升级这些库可以放入桶中,升级jBoss,Hiberate,jBPM和Quartz:)