java - HSQLDB 意外标记 : GETDATE

标签 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使用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/

相关文章:

java - JPA 映射一个映射,其中键是一个枚举

java - 连接表@OneToMany/@ManyToOne

java - 在 TestNG(Selenium with Java)中运行测试套件后如何收集所有 System.out.print ("")结果

Hibernate JPA 不为空值在集合表中插入行

java - 通过 hibernate 的 Joda-Money 持久化

java - GWT + Hibernate + HSQLDB

java - 使用 native SQL 创建表适用于 Hibernate/HSQLDB,插入失败。为什么?

java - Hibernate 延迟加载代理与其他框架不兼容

java - 监听 Javascript 函数调用 - Android

java - 在 Java 中对 UTF-16 字符串中的字符进行排序