2011-11-16 11 views

Respuesta

42

La forma más sencilla es usar HQL directamente:

DomainClass.executeUpdate('delete from DomainClass') 
+0

Genial, gracias, esto funciona muy rápido. (sin relación con esto - ¿Alguna idea sobre por qué el filtro no funciona para mí en la pregunta de filtro/líneas divididas? ¿Funcionó para ti?) – Ray

+0

Esto funciona en las versiones más nuevas de Grails. En 2.4.4 aún no. – Gab

+0

@ataylor ¿Qué pasa si la clase de dominio tiene asociaciones? Por lo general, nos gustaría eliminarlos a todos, no solo estas consultas DomainClass –

3
DomainClass.findAll().each { it.delete() } 

Si se quiere evitar cualquier trampas GORM, como la necesidad de eliminar el objeto inmediato y comprobación para asegurarse de que realmente se elimina, agrega algunos argumentos

DomainClass.findAll().each { it.delete(flush:true, failOnError:true) } 
+4

Tenga en cuenta que esto cargará la colección completa, desde la base de datos, en la memoria, luego eliminará cada uno, individualmente, con una consulta de base de datos separada para cada uno. El rendimiento de esto será terrible si tiene más que unos pocos objetos para eliminar, debido a la cantidad de viajes de ida y vuelta a la base de datos. – GreenGiant

-1

Si usted tiene una lista de objetos y desea eliminar todos los elementos, puede utilizar * operador.

'*' will split the list and pass its elements as separate arguments. 

Ejemplo.

List<Book> books = Book.findAllByTitle('grails') 
books*.delete() 
0

Por lo que he aprendido, estoy de acuerdo con @ataylor el código de abajo es más rápida si no hay asociaciones en el objeto de dominio (altamente improbable en cualquier aplicación real):

DomainClass.executeUpdate('delete from DomainClass') 

Pero si tienen assiciations con otros dominios, entonces la forma más segura de eliminar (y también un poco más lento que el mencionado anteriormente) sería el siguiente:

def domainObjects = DomainClass.findAll() 
domainObjects.each { 
it.delete(flush:it==domainObjects.last, failOnError:true) 
} 
Cuestiones relacionadas