Domanda

Sto cercando di capire come eseguire un grosso delete su un rapporto @ManyToOne, finora senza successo.

Scenario:

genitore ha molti Download, voglio eseguire una cancellazione di tutti i download in cui la data di Parent è > :some_date. Non voglio eliminare nessuno dei record padre, solo i record download. Scarica ha un campo genitore che viene mappato mediante un'annotazione @ManyToOne.

Sto cercando di usare un @NamedQuery sull'entità Scarica per raggiungere questo obiettivo.

//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

Qualche suggerimento?

È stato utile?

Soluzione 2

Sono stato in grado di ottenere il grosso delete al lavoro togliendo l'annotazione @ManyToOne e la sua sostituzione con il solo lungo parentId. Poi ho cambiato i sub sceglie di utilizzare il nome Parent invece del campo.

Ora l'OQL assomiglia a questo:

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

Non ho provato (perché non ho bisogno di funzionalità di query per quello che sto facendo), ma se si attivi e lasciare la @ManyToOne in là e usare questa OQL:

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

Altri suggerimenti

Vorrei aderire al primo approccio. C'è un messaggio di errore visualizzato?

Quando si tratta di record padre di essere eliminati insieme Download ... Sei sicuro che non si dispone di una cascata sulla relazione tra loro?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top