我正在使用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生成的查询如下:
'<generator class="increment"></generator>'
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才能找到答案。
也就是说,Mark关于“增量”效率不是很高是正确的-在集群环境中它也不安全。