Nullable Date столбец проблема слияния - PullRequest
3 голосов
/ 16 марта 2010

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

У кого-нибудь была такая проблема?

1 Ответ

5 голосов
/ 03 апреля 2010

OpenJPA делает определенные предположения, когда вы отсоединяете (и предположительно сериализуете) сущность, а затем объединяете ее обратно.

Обычно сериализация вызывает проблему такого рода - когда объект сериализуется, OpenJPA теряет свой StateManager, который отслеживает, какие поля были загружены. В результате, когда вы объединяете сущность обратно с нулевым значением, OpenJPA не уверен, что поле когда-либо было загружено, и думает, что оно не было изменено.

Есть несколько вариантов, чтобы это исправить:

Вы можете настроить OpenJPA на использование сериализуемого StateManager - и он будет отслеживать, какие поля вы загрузили. Для этого добавьте следующее свойство в файл persistence.xml.

<property name="openjpa.DetachState" value="loaded(DetachedStateField=true)"/>

Или скажите OpenJPA загрузить набор полей до отсоединения сущности. Затем OpenJPA будет знать, какие поля присутствовали, и будет правильно обрабатывать нулевое значение. Вы можете загрузить группы выборок (концепция OpenJPA, но по умолчанию загружаются все не ленивые поля) или каждое поле (это может быть дорого).

Я бы порекомендовал fetch-groups в большинстве случаев, вот свойство для 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

...