Отключение оптимистической блокировки на поле внутри компонента
Я пытаюсь отключить оптимистическую блокировку для определенного поля в компоненте. Отключение на уровне компонента (которое применяется ко всем полям в компоненте) работает. Но не для конкретной области с компонентом. Я использую 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". Однако хотелось бы отключить оптимистические проверки в спящем режиме для поля 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 И 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 не генерирует статус обновления
Мы не можем согласиться с этой возможностью изменения на уровне компонентов, поскольку ожидается одновременное обновление "статуса", и оно не завершится с staleobjectstateexception.
Есть ли способ заставить hibernate соблюдать настройку optimistic-lock="false" внутри компонента?
Спасибо, что нашли время, чтобы прочитать..
1 ответ
Атрибут свойства optimistick-lock должен помочь:
указывает, что для обновления этого свойства требуется или не требуется получение оптимистической блокировки. Другими словами, он определяет, должно ли происходить увеличение версии, когда это свойство грязное.
Попробуйте обновить hibernate до более новой версии, например, 3.5.6.