2010-03-16 3 views
3

J'utilise JPA avec l'implémentation openjpa ci-dessous, sur un serveur d'applications Geronimo. J'utilise également la base de données MySQL. J'ai un problème avec la mise à jour de l'objet avec la propriété Date nullable. Lorsque j'essaie de fusionner une entité avec la propriété Date définie sur null, aucun script de mise à jour SQL n'est généré (ou lorsque d'autres champs sont modifiés, le script de mise à jour sql est généré, mais le champ date est omis). Si le champ date est défini sur une autre valeur non nulle, le script de mise à jour est correctement généré.Problème de fusion de colonne de date Nullable

Est-ce que quelqu'un avait un problème comme ça?

Répondre

5

OpenJPA fait certaines hypothèses lorsque vous avez détachées (et probablement un numéro de série) une entité puis fusionner la dans

Il est généralement la sérialisation qui débute dans ce genre de problème. - lorsque l'entité est sérialisé OpenJPA perd son StateManager qui suit quels champs ont été chargés. Par conséquent, lorsque vous fusionnez l'entité avec une valeur nulle, OpenJPA n'est pas certain que le champ ait été chargé et pense qu'il n'a pas été modifié.

Il y a deux options pour résoudre ce problème:

Vous pouvez configurer OpenJPA utiliser un StateManager sérialisable - et il gardera une trace des champs que vous avez chargé. Pour ce faire, ajoutez la propriété suivante à persistence.xml.

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

Ou dites à OpenJPA de charger un ensemble de champs avant que l'entité ne soit détachée. OpenJPA va alors savoir quels champs étaient présents et traitera correctement une valeur nulle. Vos options sont de charger les fetch-groups (un concept OpenJPA, mais par défaut il charge tous les champs non-LAZY), ou tous les champs (cela peut être coûteux).

Je recommanderais fetch-groups dans la plupart des cas, voici la propriété pour persistence.xml.

<property name="openjpa.DetachState" value="fetch-groups"/> 

Vous pouvez faire des choses intelligentes avec des graphiques d'objets détachés si vous êtes si incliné. Le manuel OpenJPA a plus d'informations à http://openjpa.apache.org/builds/1.2.2/apache-openjpa-1.2.2/docs/manual/manual.html#ref_guide_detach_graph

+0

Merci. Ce problème résolu. – Vladimir