Frage

Ich versuche, herauszufinden, wie ein Bulk löscht auf einer @ManyToOne Beziehung auszuführen, bisher ohne Erfolg.

Szenario:

Elternteil hat viele Downloads, möchte ich einen Lösch aller Downloads auszuführen, wo die Eltern Date > :some_date ist. Ich will nicht den übergeordneten Datensätze löschen, sondern nur die Download-Datensatz. Download hat ein übergeordnetes Feld, das eine @ManyToOne Anmerkung abgebildet werden.

Ich versuche, eine @NamedQuery auf der Download-Einheit 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?

War es hilfreich?

Lösung 2

Ich konnte die Masse erhalten löscht, indem Sie die @ManyToOne Annotation und ersetzt sie nur mit dem Lang parentId zu arbeiten. Dann änderte ich die Unter wählen Sie die Eltern-Namen anstelle des Feldes zu verwenden.

Nun ist die OQL sieht wie folgt aus:

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

Ich habe es nicht ausprobiert (weil ich nicht Abfragefunktionen benötigen, was ich tue), aber wenn kann die @ManyToOne dort zu verlassen arbeiten und diese OQL verwenden:

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

Andere Tipps

Ich würde halten Sie sich an den ersten Ansatz. Gibt es eine Fehlermeldung angezeigt?

Wenn es um übergeordnete Datensätze kommt zusammen mit Downloads gelöscht ... Sind Sie sicher, dass Sie nicht über eine Kaskade über die Beziehung zwischen ihnen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top