Grails GORM实例在更新问题时自动持久化到数据库
我在controller中有一个自定义验证,因为我需要使用数据库进行验证Grails GORM实例在更新问题时自动持久化到数据库,grails,gorm,Grails,Gorm,我在controller中有一个自定义验证,因为我需要使用数据库进行验证 def update(Object instance) { if (instance == null) { notFound() return } if (instance.hasErrors()) { //redirect code here return } def obj = objService.someM
def update(Object instance) {
if (instance == null) {
notFound()
return
}
if (instance.hasErrors()) {
//redirect code here
return
}
def obj = objService.someMethod()
//some validation code here
if(someCheck){
// if i discard it wont work
instance.discard()
flash.error = message(code: 'message.code')
//render code here
return
}
在上面的代码中,执行数据库访问后,即使是
实例.discard()
也不起作用。即使没有save方法调用,更改的数据也会自动保存。如果没有执行数据库访问,则相同的实例.discard()
将起作用。当验证失败时,如何放弃要保留到数据库中的更改值。在更新操作上方添加注释@Transactional(readonly=true)
。这应该能奏效
这是Grails的内置特性,它自动将实例持久化到数据库中
请阅读我的答案,了解更多细节
在更新
操作上方添加注释@Transactional(readonly=true)
。这应该能奏效
这是Grails的内置特性,它自动将实例持久化到数据库中
请阅读我的答案,了解更多细节
在调用save之前进行检查?看起来很合乎逻辑……这是实例更新案例,正如您看到的,如果验证在somecheck中失败,那么流将从那里返回,save()语句将永远不会执行。因为它在持久化上下文中,所以所有更改的值都会持久化,这很明显,但是在我访问数据库之后,discard()方法就不起作用了。在调用save之前进行检查吗?看起来很合乎逻辑……这是实例更新案例,正如您看到的,如果验证在somecheck中失败,那么流将从那里返回,save()语句将永远不会执行。因为它在持久化上下文中,所以所有更改的值都会持久化,这很明显,但是在我访问一些数据库之后,discard()方法就不起作用了。