Ответ 1
Самый простой способ - напрямую использовать HQL:
DomainClass.executeUpdate('delete from DomainClass')
У меня есть класс домена, Виджет, который должен удалить все экземпляры из - очистить его. После этого я загружу свежие данные. Что вы предлагаете в качестве механизма для этого?
P.S. Обратите внимание, что это не во время загрузки, а в "время выполнения".
Самый простой способ - напрямую использовать HQL:
DomainClass.executeUpdate('delete from DomainClass')
DomainClass.findAll().each { it.delete() }
Если вы хотите избежать любых ошибок GORM, таких как необходимость немедленного удаления объекта и проверки, чтобы убедиться, что он действительно удален, добавьте некоторые аргументы.
DomainClass.findAll().each { it.delete(flush:true, failOnError:true) }
Из того, что я узнал, я согласен с @ataylor, что приведенный ниже код является самым быстрым, если в вашем доменном объекте нет ассоциаций (маловероятно в любом реальном приложении):
DomainClass.executeUpdate('delete from DomainClass')
Но если у вас есть ассимиляции с другими доменами, то самый безопасный способ удаления (а также немного медленнее, чем упомянутый выше) будет следующим:
def domainObjects = DomainClass.findAll()
domainObjects.each {
it.delete(flush:it==domainObjects.last, failOnError:true)
}
Если у вас есть список объектов и вы хотите удалить все элементы, вы можете использовать оператор *
.
'*' will split the list and pass its elements as separate arguments.
Пример.
List<Book> books = Book.findAllByTitle('grails')
books*.delete()