Ho una tabella con record che devono essere cancellati periodicamente in base a una serie di criteri.Come si eliminano i record di massa in Grails/GORM?
mi aspettavo che avrei potuto usare il criterio Builder per eliminare solo i record, ma che non è riuscito perché non esiste un metodo delete
su criteri ...
def c = Agency.createCriteria()
c.delete
{
eq("agency", "XXX")
}
Così ho pensato che forse avrei prima query per la set e quindi eliminare quella ...
def c = Agency.createCriteria()
def deletions = c
{
eq("agency", "XXX")
}
deletions.delete
Questo fallisce anche per lo stesso motivo, oggetto diverso.
Quindi qual è il modo giusto per farlo? Sembra eccessivo (perverso) che io debba ripetere l'intero set di risultati chiamando lo delete()
su ciascun articolo.
So di poter creare una query da eseguire direttamente in HQL o SQL, ma anche questo sembra sbagliato. Il costruttore di criteri è pensato solo per il recupero?
Grazie
sì, questo è come lo sto facendo, ma è un po 'pazzo che non posso usare criteri. DELETE è una parte valida della semantica della query e supportata da tutti gli RDBMS e una cosa perfettamente valida da fare, nonostante ciò che gli autori di Hibernate/GORM possono pensare. Nel mio caso sarebbe una pessima pratica lasciare i record non aggiornati nella tabella. – Simon
come riferimenti JesperSM: Ora Grails 2+ ha un deleteAll() su DetachedCriteria. –
Questo funziona. Peccato, tuttavia, che non elimina a cascata le righe nelle tabelle figlio. Quindi fornisce una 'violazione del vincolo di integrità '. Testato in '2.3.7'. – Guus