我试图关闭组件中特定字段的乐观锁定。关闭组件级别(适用于组件中的所有字段)。但不适用于组件中的特定字段。我正在使用hibernate 3.2.x
让我解释一下这个问题的更多内容
Member.hbm.xml
<class name="com.test.core.model.member.Member" abstract="true"
table="MEMBER" optimistic-lock="dirty" dynamic-update="true"
polymorphism="explicit" discriminator-value="LITE">
.....
.....
<component name="helper" class="com.test.core.model.Helper">
<property name="status">
<column name="STATUS" />
<type name="org.hibernate.type.EnumType">
<param name="enumClass">
com.test.core.model.Helper$Status
</param>
</type>
</property>
<property name="changeXML" type="string">
<column name="CHANGE_XML" />
</property>
<property name="lastChange" type="timestamp">
<column name="LAST_CHANGE" />
</property>
</component>
</class>
</hibernate-mapping>
我被限制在类级别使用optimistic-lock =“dirty”,所以我无法切换到“version”。 但是,希望通过hibernate禁用组件内部的changeXML字段进行乐观检查。
所以我改变了
<property name="changeXML" type="string" >
to
<property name="changeXML" type="string" optimistic-lock="false">
因为在组件中这个设置由于某种原因不受尊重。因此,在将更新提交给changeXML之前,hibernate会在内部生成验证查询。
即更新MEMBER SET CHANGE_XML =“NEWVALUE”WHERE ID = SOMETHING AND CHANGE_XML = OLDVALUE
然而在组件级别改变即 改变
<component name="helper" class="com.test.core.model.Helper">
to
<component name="helper" class="com.test.core.model.Helper" optimistic-lock="false">
通过尊重此设置来工作,而hibernate不会生成更新语句
我们无法解决在组件级别更改的选项,因为对“status”的并发更新是预期的,并且不会因staleobjectstateexception而失败。
有没有办法让hibernate尊重组件中的optimistic-lock =“false”设置?
感谢您花时间阅读..
答案 0 :(得分:1)
属性属性optimistick-lock应该可以解决问题:
指定对此属性的更新是否需要 收购乐观锁。换句话说,它确定是否 当此属性变脏时,应该发生版本增量。
尝试将hibernate更新为更新的版本,例如3.5.6。