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
Merci. Ce problème résolu. – Vladimir