关闭组件中字段的乐观锁定

时间:2015-01-25 17:57:37

标签: java hibernate orm transactions optimistic

我试图关闭组件中特定字段的乐观锁定。关闭组件级别(适用于组件中的所有字段)。但不适用于组件中的特定字段。我正在使用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”的并发更新是预期的,并且不会因s​​taleobjectstateexception而失败。

有没有办法让hibernate尊重组件中的optimistic-lock =“false”设置?

感谢您花时间阅读..

1 个答案:

答案 0 :(得分:1)

属性属性optimistick-lock应该可以解决问题:

  

指定对此属性的更新是否需要   收购乐观锁。换句话说,它确定是否   当此属性变脏时,应该发生版本增量。

尝试将hibernate更新为更新的版本,例如3.5.6。