我有一个域类,Widget,我需要删除所有实例 - 清除它。之后,我将加载新的数据。你有什么建议作为一个机制来做到这一点?grails删除表/域类中的所有数据,即“deleteAll”
P.S.请注意,这不是在引导时间,而是在“运行时”。
我有一个域类,Widget,我需要删除所有实例 - 清除它。之后,我将加载新的数据。你有什么建议作为一个机制来做到这一点?grails删除表/域类中的所有数据,即“deleteAll”
P.S.请注意,这不是在引导时间,而是在“运行时”。
DomainClass.findAll().each { it.delete() }
如果你想避免任何GORM陷阱,如需要立即删除对象和检查,以确保它实际上被删除,添加一些参数。
DomainClass.findAll().each { it.delete(flush:true, failOnError:true) }
请注意,这将从数据库将整个集合加载到内存中,然后分别使用单独的数据库查询为每个集合删除每个集合。由于往返数据库的次数,如果您不仅仅删除了一些对象,而且这样做的性能会很糟糕。 – GreenGiant
如果您有一个对象列表并且想要删除所有元素,则可以使用*
运算符。
'*' will split the list and pass its elements as separate arguments.
例子。
List<Book> books = Book.findAllByTitle('grails')
books*.delete()
从我所学到的,我同意@ataylor下面的代码是最快的,如果有你的域对象没有关联(在任何实际的应用可能性很小):
DomainClass.executeUpdate('delete from DomainClass')
但是,如果你有与其他域,然后assiciations删除最安全的方式(和也比上述一个慢一点)将如下所示:
def domainObjects = DomainClass.findAll()
domainObjects.each {
it.delete(flush:it==domainObjects.last, failOnError:true)
}
这也回答http://stackoverflow.com/a/ 10278312/329954 – JesperSM