Grails удаляет все данные из таблицы/класса домена, то есть "deleteAll"

У меня есть класс домена, Виджет, который должен удалить все экземпляры из - очистить его. После этого я загружу свежие данные. Что вы предлагаете в качестве механизма для этого?

P.S. Обратите внимание, что это не во время загрузки, а в "время выполнения".

Ответ 1

Самый простой способ - напрямую использовать HQL:

DomainClass.executeUpdate('delete from DomainClass')

Ответ 2

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

Если вы хотите избежать любых ошибок GORM, таких как необходимость немедленного удаления объекта и проверки, чтобы убедиться, что он действительно удален, добавьте некоторые аргументы.

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

Ответ 3

Из того, что я узнал, я согласен с @ataylor, что приведенный ниже код является самым быстрым, если в вашем доменном объекте нет ассоциаций (маловероятно в любом реальном приложении):

DomainClass.executeUpdate('delete from DomainClass')

Но если у вас есть ассимиляции с другими доменами, то самый безопасный способ удаления (а также немного медленнее, чем упомянутый выше) будет следующим:

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

Ответ 4

Если у вас есть список объектов и вы хотите удалить все элементы, вы можете использовать оператор *.

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

Пример.

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