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模式类型设置为commitauto