一尘不染

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

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”属性。

该问题如何解决?


阅读 188

收藏
2020-06-20

共1个答案

一尘不染

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

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

可悲的是,这在Hibernate文档中没有很好地描述。您必须查看API
javadoc
才能找到答案

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

2020-06-20