我有一种方法在我的服务中,有@Transactional
注释。 里面,我正在做2个对象的各种东西,最后,我想.discard()
其中之一的变化,所以它没有保存在这个事务。 我所做的就是将关于object2的信息发送到我的ActiveMQ队列中,由侦听器拾取它,在那里完成一些工作,最后保存在另一个事务中。 Object1应该照常保存。为什么domainObject.discard()在Grails的@Transactional服务中不起作用?
但是,这是行不通的。会发生什么情况是,我的队列上的听众能够在对象上执行.get()
,并在第一次事务结束之前对其执行一些更改和.save()
它。感谢那,我得到org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
。我执行.get()
服务内的对象。退出服务并返回控制器时保存交易。
为了防止Grails在主事务中保存object2,我该怎么做?
你不能把object2的访问权限放在你的服务中的一个单独的方法中,并让它不成为你的外部事务吗? – 2012-02-16 16:23:02
不。这是使用排队机制的一个要点 - 在单独的事务中完成它[这不是唯一的一点,请注意]。 – Krystian 2012-02-16 16:26:11
我不知道这个问题的答案,但现在可以解决.read()这个你可能不想保存的对象,然后它不会被保存,除非你明确地保存它。 – 2012-02-17 04:24:24