如何在oracle兼容模式和hibernate中使用hsqldb来获取序列的下一个值

时间:2013-09-27 17:45:11

标签: java oracle hibernate hsqldb

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

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

return name.equals(rangeTable.getSchemaName().name)
每当hibernate创建sql时,org.hsqldb.RangeVariable.java文件的resolvesSchemaName(String name)函数中的

都会抛出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”,所以像hibernate一样选择nextval会在oracle兼容模式下在hsqldb中工作。 / p>

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

1 个答案:

答案 0 :(得分:1)

我在

的hi​​bernate会话工厂中更改了方言(hibernate.dialect)
org.hibernate.dialect.Oracle10gDialect

org.hibernate.dialect.HSQLDialect

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