OpenJPA делает определенные предположения, когда вы обособленные (и, предположительно, преобразованные в последовательную форму) объект, а затем объединить его обратно в
Это обычно сериализации, что пинает в такого рода проблемы. - когда объект сериализации OpenJPA теряет его StateManager, который отслеживает, какие поля были загружены. В результате, когда вы объедините объект обратно с нулевым значением, OpenJPA не уверен, что поле всегда загружалось и думает, что оно не было изменено.
Есть несколько вариантов, чтобы исправить это:
Вы можете настроить OpenJPA использовать сериализуемую StateManager - и он будет отслеживать, какие поля вы загрузили. Для этого добавьте следующее свойство persistence.xml.
<property name="openjpa.DetachState" value="loaded(DetachedStateField=true)"/>
Или сообщите OpenJPA, чтобы загрузить набор полей до того, как объект отсоединен. Затем OpenJPA узнает, какие поля присутствуют, и правильно обрабатывает нулевое значение. Ваши параметры - загрузить группы выборки (концепция OpenJPA, но по умолчанию она загружает все поля, отличные от LAZY), или каждое поле (это может быть дорого).
Я бы рекомендовал группы-выборки в большинстве случаев, вот свойство persistence.xml.
<property name="openjpa.DetachState" value="fetch-groups"/>
Вы можете сделать некоторые умные вещи с графами отдельных объектов, если вы так склонны. Руководство OpenJPA имеет более подробную информацию на http://openjpa.apache.org/builds/1.2.2/apache-openjpa-1.2.2/docs/manual/manual.html#ref_guide_detach_graph
Спасибо. Эта проблема решена. – Vladimir