我有一個域類,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