2010-03-16 4 views
3

Я использую JPA с реализацией openjpa ниже, на сервере приложений Geronimo. Я также использую базу данных MySQL. У меня проблема с обновлением объекта с нулевым свойством Date. Когда я пытаюсь объединить сущность с свойством Date, установленным в null, сценарий обновления sql не генерируется (или когда изменяются другие поля, генерируется сценарий обновления sql, но из него исключено поле даты). Если для поля даты установлено какое-то другое значение, отличное от нуля, сценарий обновления создается правильно.Проблема с объединением столбцов Nullable Date

У кого-нибудь возникли проблемы?

ответ

5

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

+0

Спасибо. Эта проблема решена. – Vladimir