【问题标题】:How to use hsqldb in oracle compatibility mode and hibernate to get the next value of a sequence如何在oracle兼容模式下使用hsqldb和hibernate获取序列的下一个值
【发布时间】:2013-10-04 02:50:31
【问题描述】:

我在 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”,因此像 hibernate 一样选择 nextval 将在 oracle 兼容模式下的 hsqldb 中工作。

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

【问题讨论】:

    标签: java oracle hibernate hsqldb


    【解决方案1】:

    我从

    更改了我的休眠会话工厂中的方言 (hibernate.dialect)
    org.hibernate.dialect.Oracle10gDialect
    

    org.hibernate.dialect.HSQLDialect
    

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

    【讨论】:

    • 这是一个错误,已在 2.3.1 版本中修复。
    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2021-07-13
    相关资源
    最近更新 更多