2009-07-09 6 views
1

J'essaie de comprendre comment exécuter une suppression groupée sur une relation @ManyToOne, jusqu'à présent sans succès.Comment exécuter une suppression groupée avec une relation dans EJB3

Scénario:

Parent a beaucoup de téléchargements, je veux exécuter une suppression de tous les téléchargements lorsque la date de Parent est > :some_date. Je ne veux supprimer aucun des enregistrements parent, seulement les enregistrements de téléchargement. Le téléchargement a un champ parent qui est mappé en utilisant une annotation @ManyToOne. J'essaie d'utiliser @NamedQuery sur l'entité Download pour accomplir ceci.

//this OQL tries to delete from both the child and parent tables 
//I only want to delete from the Download table 
DELETE FROM Download dwn 
    WHERE dwn.acctId = :acctId AND dwn.parent.date > :date 

//this OQL is invalid and will keep the bean from deploying 
//The example I found used this sub query but with a @OneToMany relationship 
//instead of a @ManyToOne relationship 
//this is what i get for an error on deployment: 
//"Errors in named queries: deleteByAccountIdAndDownloadedDate" 
DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p from dwn.parent WHERE p.date > :date) 
    AND dwn.acctId = :acctId 

Des suggestions?

Répondre

0

J'ai été en mesure de faire fonctionner la suppression en bloc en supprimant l'annotation @ManyToOne et en la remplaçant simplement par le parentId Long. Puis j'ai changé le sous-select pour utiliser le nom de Parent au lieu du champ.

Maintenant, le OQL ressemble à ceci:

DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p FROM Parent p WHERE p.id = dwn.parentId and p.date > :date) 

Je n'y suis pas allé (parce que je ne ai pas besoin des capacités de requête pour ce que je fais), mais si peut travailler de quitter le @ManyToOne là-bas et utiliser cette OQL:

DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p FROM Parent p WHERE p.id = dwn.parent.id and p.date > :date) 
1

Je m'en tiens à la première approche. Y a-t-il un message d'erreur affiché?

En ce qui concerne les enregistrements parents à supprimer avec Téléchargements ... Êtes-vous sûr de ne pas avoir de cascade sur la relation entre eux?

+0

Je vérifierai les paramètres de cascade de mon DBA. –

+0

N'oubliez pas que la cascade peut être spécifiée au niveau JPA (lors de la définition des relations) et/ou dans la base de données. –

Questions connexes