[英]'save' does not work, tried flush and failOnError:true but no error was given
我正在尝试使用flush:true
为save()
操作更新数据库。 调试器显示状态已更新,但是当我使用此sql时
Select * from domain_name where id = 123
我仍然有旧的身份。
我正在使用Quartz插件来运行从同一表读取的计划的cron作业:
DomainName.withTransaction{ status ->
try
{
DomainName name = DomainName.get(123)
name.status = "newstatus"
name.save(flush:true,failOnError:true)
}
catch(Exception rte)
{
log.error "Update failed with error ${rte.message}"
status.setRollbackOnly()
}
}
有没有人遇到过类似的问题? 打开config.groovy中的休眠日志没有错误
debug 'org.hibernate.SQL'
'org.hibernate.transaction'
我遇到了这个问题。 原来,要更新的实例是通过动态查找器获取的。 一旦我使用get(id)获取实例,则将值保存到数据库表中。
在故障排除期间,我打开了SQL日志记录。 当应该通过查找器获取实例时,如果应该更新该行,则不会将任何更新语句写入控制台。 使用get(id)将更新语句写入控制台。
我认为问题出在给定的代码块之前。
您是否在进行此事务之前通过脏检查(例如Domain.get()
)拉动了该对象,该事务仍然存在? 我的建议是仔细检查您的代码,脱离所有脏检查(例如,使用Domain.discard()
),然后重试。 那应该解决您的问题。
我面临着类似的问题。 我通过动态方法获取对象。 然后将一个属性传递给另一个方法。 在另一种方法中,我再次通过动态查找器获取对象。
我保存了域对象,但没有保存。 我尝试了failOnError
以及flush
但是没有用。
我通过了域对象而不是使用动态查找器,它起作用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.