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

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

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


每当hibernate创建sql时,org.hsqldb.RangeVariable.java文件的resolvesSchemaName(String name)函数中的NullPointerException都会抛出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中工作。

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

最佳答案

我从以下位置更改了我的休眠会话工厂中的方言(hibernate.dialect)

org.hibernate.dialect.Oracle10gDialect




org.hibernate.dialect.HSQLDialect


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

关于java - 如何在Oracle兼容模式下使用hsqldb并 hibernate 以获取序列的下一个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19056985/

10-12 13:59