1

我在 oracle 兼容模式下使用 hsqldb 作为为 Oracle 编写的应用程序的测试数据库。我也在使用休眠。

在 hsqldb 的 2.3.0 版(撰写本文时的最新版本)和 2.2.9 版中,该行

return name.equals(rangeTable.getSchemaName().name)

在 org.hsqldb.RangeVariable.java 文件的 resolvesSchemaName(String name) 函数中,每当 hibernate 创建 sql 时都会抛出 NullPointerException

select <SEQUENCE_NAME>.nextval from dual

因为 rangeTable.getSchemaName() 返回 null。

我认为由于http://hsqldb.org/doc/guide/management-chapt.html#mtc_compatibility_oracle说“ORA 语法模式支持 DUAL 表和表达式、ROWNUM、CURRVAL、NEXTVAL”选择像休眠一样的 nextval 是在 oracle 兼容模式下在 hsqldb 中执行操作。

这是一个错误还是我做错了什么?

4

1 回答 1

1

我将休眠会话工厂中的方言(hibernate.dialect)从

org.hibernate.dialect.Oracle10gDialect

org.hibernate.dialect.HSQLDialect

这改变了休眠生成的 SQL 语法以获取序列的下一个值,然后不再有 NullPointerExceptions。

于 2013-09-27T19:24:20.077 回答