Ich versuche herauszufinden, wie Sie eine Massenlöschung in einer @ ManyToOne-Beziehung ausführen, bisher ohne Erfolg.So führen Sie Bulk-Delete mit Beziehung in EJB3 aus
Szenario:
Elternteil viele Downloads hat, möchte ich eine Löschen aller Downloads auszuführen, wo die Eltern Date > :some_date
ist. Ich möchte keine der übergeordneten Datensätze löschen, sondern nur die Datensätze herunterladen. Der Download enthält ein übergeordnetes Feld, das mithilfe einer @ManyToOne-Annotation zugeordnet wird.
Ich versuche, eine @namedQuery auf die Download-Entität zu verwenden, um dies zu erreichen.
//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
Irgendwelche Vorschläge?
Ich werde die Kaskadeneinstellungen von meinem DBA überprüfen. –
Bitte beachten Sie, dass die Kaskadierung sowohl auf JPA-Ebene (beim Definieren von Relationen) als auch in der DB angegeben werden kann. –