我正在尝试关闭组件中特定字段的乐观锁定。在组件级别关闭(适用于组件中的所有字段)有效。但不适用于组件中的特定字段。我正在使用休眠 3.2.x
让我解释一下这个问题
成员.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",所以我不能切换到“版本”。但是,希望通过休眠对组件内的 changeXML 字段禁用乐观检查。
所以我改变了
<property name="changeXML" type="string" >
to
<property name="changeXML" type="string" optimistic-lock="false">
因为这是在组件中,所以由于某种原因不遵守此设置。因此,hibernate 在提交对 changeXML 的更新之前会在内部生成验证查询。
即更新 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">
通过尊重此设置来工作,并且休眠不会生成更新语句
我们无法解决在组件级别更改的选项,因为对“状态”的并发更新是预期的,并且不会因 staleobjectstateexception 而失败。
有没有办法告诉hibernate尊重组件中的optimistic-lock="false"设置?
感谢您花时间阅读..