[英]Why does domainObject.discard() not work in @Transactional service in Grails?
我的服务中有一个方法,带有@Transactional
批注。 在内部,我要对2个对象进行各种处理,最后,我想对其中一个对象进行.discard()
更改,因此它不会保存在此事务中。 我要做的是将有关object2的信息发送到我的ActiveMQ队列中,由侦听器在其中进行一些工作,最后将其保存在另一个事务中。 应该将Object1照常保存。
但是,这不起作用。 发生的是,在第一个事务结束之前,队列中的侦听器能够.get()
对象,对其进行一些更改,并对其进行.save()
。 由于这一点,我得到了org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
。
我在服务内部执行.get()
对象。 退出服务并返回到控制器时,将保存事务。
如何防止Grails在主事务中保存object2?
您可以在服务方法结束之前在object2上尝试.refresh()
。 这将使用数据库中的更新数据重新加载并覆盖object2中的任何数据,因此,乐观锁定version
变量会匹配(我认为这是导致您Exception
)。 而且Hibernate不需要刷新对象,因为它现在与数据库匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.