我正在使用 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/