繁体   English   中英

为什么domainObject.discard()在Grails的@Transactional服务中不起作用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM