mardi 15 janvier 2008

Kodo Optimistic Exceptions

Aujourd'hui, une simple astuce dans l'utilisation de Kodo. Dans le cas de table avec des relations parent-enfants, il est assez courant de vouloir utiliser des supressions en cascade.
Pour ce faire on configure le CascadeType dans le bean entity.

Je suis tombé hier sur une exception de type OptmisticException dans le cas d'une suppression en cascade :
<1.0.0> org.apache.openjpa.util.OptimisticException: Optimistic locking errors were detected when flushing to the data store. The following objects may have been concurrently modified in another transaction:

Il s'avère que Kodo a l'étrange idée de se tirer une balle dans le pied en tentant de supprimer d'abors l'enregistrement parent et ensuite les enfants...

Pour palier à ce soucis, je vous invite à rajouter dans votre persistance.xml la petite ligne qui suit :




<property name="kodo.jdbc.MappingDefaults" value="jpa(ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict)"/>



Merci Bea d'agrémenter mes journées de travail par de longues et infructueuses recherches désespérées de la petitie ligne de configuration servant à modifier un comportement qui, bien que nécessaire dans 99% des cas, n'est pas activé par défault.