Question

J'utilise JPA avec la mise en œuvre de openjpa sous, sur un serveur d'applications Geronimo. J'utilise aussi la base de données MySQL. J'ai un problème avec l'objet de mise à jour à la propriété annulable Date. Quand je suis en train de fusionner avec une entité propriété Date à null, aucun script de mise à jour de SQL est généré (ou lorsque d'autres champs sont modifiés, le script de mise à jour de SQL est générée, mais le champ de date ommited de celle-ci). Si le champ de date est fixée à une autre valeur non nulle, le script de mise à jour est correctement généré.

Quelqu'un at-il problème comme ça?

Était-ce utile?

La solution

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

Il est généralement la sérialisation qui se déclenche ce genre de problème - lorsque l'entité est sérialisé OpenJPA perd sa StateManager pistes qui les champs ont été chargés. En conséquence lors de la fusion de l'entité de retour avec une OpenJPA de valeur nulle est pas certain que le domaine n'a jamais é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 garder 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 dire OpenJPA pour charger un ensemble de champs avant que l'entité est détachée. OpenJPA saura alors quels champs étaient présents et gérer une valeur NULL correctement. Vos options sont à charger les fetch-groupes (un concept OpenJPA, mais par défaut il charge tous les champs non-lazy), ou tous les domaines (cela peut être coûteux).

Je vous recommande dans la plupart des cas fetch-groupes, 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 a OpenJPA plus d'informations à

scroll top