Spring Transactional注释,隔离不适用于READ_UNCOMMITTED
我在Java中有一个方法,它由spring Transactional
注释包装。
我里面有2个操作,一个是delete
,另一个是insert
。 我的插入语句必须依赖于第一个操作(即delete
),但是由于第一个操作尚未提交,我的插入失败(唯一约束)。 但有趣的是,通常在同一个事务中,我应该能够在同一个事务中读取/查看未经授权的操作(我的旧专有框架能够做到这一点),但这不适用于我的场景,第二个插入仍然失败,因为它看到数据尚未删除。
我尝试使用隔离READ_UNCOMMITTED
,但它不起作用。
我必须将这两个操作放在同一个事务中,因为任何一个失败都应该回滚两个操作,我不能提交第一个操作然后继续第二个操作。
我怎么能在Spring框架中做到这一点?
通常在Hibernate中,在同一事务中, while flushing(committing) it always follows a particular order.
首先执行Inserts
,然后在刷新时执行deletes
。
理想情况下,在你的情况下,因为你在insert
之前deleting
只是在delete
后显式调用enitityManager.flush()
。
或者也可以查看EntityManager.setFlushMode()
方法,您可以在其中将flush模式类型设置为commit
或auto