Grails 1.1 持久化基础 - 删除对象

下面是 delete 方法的一个例子:def p = Person.get(1) p.delete()默认情况下在执行delete以后Grails将使用事务写入, 如果你想在适当的时候删除,这时你可以使用flush 参数:def p = Person.get(1) p.delete(flush:true)使用 flush 参数也允许您捕获在delete执行过程中抛出的任何异常. 一个普遍的错误就是违犯数据库的约束, 尽管这通常归结为一个编程或配置错误.

下面的例子显示了当您违犯了数据库约束时如何捕捉DataIntegrityViolationException:[code]def p = Person.get(1)
try {
p.delete(flush:true)
}

catch(org.springframework.dao.DataIntegrityViolationException e) {
	flash.message = "Could not delete person ${p.name}"
	redirect(action:"show", id:p.id)
}[/code]注意Grails没有提供 deleteAll 方法,因为删除数据是discouraged的,而且通常可以通过布尔标记/逻辑来避免.

如果你确实需要批量删除数据,你可以使用 executeUpdate 法来执行批量的DML语句:Customer.executeUpdate("delete Customer c where c.name = :oldName", [oldName:"Fred"])