2010-03-11 11 views
1

J'ai deux tables dans ma base de données OracleQuelle est l'ordre des suppressions JDO

Demande et Approbateur. Chaque approbateur a une demande. Une clé étrangère protégée par une contrainte.

Dans mon code java en utilisant kodo jdo 3.4, j'appelle supprimer persistant sur certains ou tous les approbateurs. Puis, à la fin, s'il n'y a plus d'approbateur, j'appelle delete persistant sur la demande. Quand je commets, mes contraintes d'intégrité se déclenchent parce que le sql fonctionne dans le mauvais ordre, je suppose.

Existe-t-il un moyen de forcer la suppression des appels à la base de données d'une certaine manière?

Je pensais également à annuler moi-même la transaction dans le cas où tout serait effacé et forcer manuellement les suppressions dans le bon ordre. Mais cela semble être un hack.

Merci

+0

Et pourquoi vous l'avez fait wiki communautaire. Ce n'est pas qualifié pour ça. –

Répondre

0

Je pense que le problème est parce que vous supprimez les Approver s dans une transaction, et la suppression Request dans un autre. Essayez de valider la transaction dans laquelle vous avez supprimé les Approver s.

chose Deuxièmement, vous voudrez peut-être à faire est de ALTER la définition de table Request et définir avec ON DELETE CASCADE, alors vous ne devez pas faire tout cela par vous-même. Je ne sais pas si quelque chose, une exigence, vous empêche de faire de cette façon.

0

JDO gère-t-il la relation (par exemple, Request a-t-il un champ Set et spécifie l'attribut JDO "mapped-by") ou configurez-vous explicitement la clé étrangère? Si JDO est conscient de la relation, il doit effectuer les suppressions dans le bon ordre. Sinon, si la modification de la configuration JDO n'est pas une option, vous pouvez essayer d'appeler la méthode flush() de PersistenceManager après avoir supprimé les approbateurs. Cela devrait appliquer toutes les suppressions en suspens au datastore (toujours dans la transaction).

+0

JDO gère les relations. Le flush peut fonctionner. – Aaron