oracle - Hibernate:使用增量和 Oracle 模式的 ID 生成器

标签 oracle hibernate

我正在使用 Hiberbnate 3.1.3。我有一个如下的映射,当我尝试将记录插入 TEST_TABLE 时,出现异常:“线程“main”中的异常 org.hibernate.exception.SQLGrammarException:无法获取增量生成器的初始值”

<class name="com.test.app.to.TestTable" table="TEST_TABLE" schema="TEST">
        <id name="testId" type="long">
            <column name="TEST_ID" precision="12" scale="0" />
            <generator class="increment"></generator>
        </id>
</class>

我在 cfg.xml 中设置了如下默认架构,因为我还需要在应用程序中使用 OTHER_SCHEMA 中的表。

<property name="hibernate.default_schema">OTHER_SCHEMA</property>

在上面的情况下,它似乎是一个 Hibernate Bug,因为使用 TestTable 对象的读取工作正常并且正确使用“TEST”模式,但是 '<generator class="increment"></generator>'不使用“TEST”架构,而是使用默认的“OTHER_SCHEMA”来获取最大 ID。为最大 ID 生成的查询如下:

Hibernate: select max(TEST_ID) from OTHER_SCHEMA.TEST_TABLE

我无法为生成器指定架构,并且它没有使用我希望它使用的类的 schema="TEST"属性。

如何解决这个问题?

最佳答案

可以使用schema参数指定生成器的架构:

<generator class="increment">
    <param name="schema">TEST</param>
</generator>

遗憾的是,Hibernate 文档对此没有很好的描述;你必须看看 API javadoc以便找出答案。

也就是说,马克关于“增量”效率不高的观点是正确的 - 它在集群环境中也不安全。

关于oracle - Hibernate:使用增量和 Oracle 模式的 ID 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1566263/

相关文章:

oracle - 更新/删除不存在的行时出现 PL/SQL 异常

sql - 如何在 LIKE 运算符中引入多个条件?

hibernate - 字符串类型的Grails/hibernate 最大值

java - LazyInitializationException 问题

java - 如何使用 JPA 调用需要常量参数的 SQL native 函数?

oracle - 如何创建选择列表而不指定其值列表?

java - HSQLDB 支持中的文档数据类型

sql - 如何从一列插入多行?

java - hibernate 空间 - 'Invalid endian flag value encountered' 异常

java - 具有聚合内连接的 JPA Criteria 查询