Spring 事务注释,隔离不适用于 READ_UNCOMMITTED

Spring Transactional annotation, isolation not working for READ_UNCOMMITTED

我在 Java 中有一个方法,它由 spring Transactional 注释包装。

我里面有2个操作,一个是delete,一个是insert。我的插入语句必须依赖第一个操作(即 delete),但现在由于第一个操作尚未提交,所以我的插入失败(唯一约束)。但有趣的是,通常在同一个事务中,我应该能够 read/see 同一个事务中的未提交操作(我的旧专有框架能够做到这一点),但这在我的场景中没有发生,第二次插入仍然失败,因为它看到数据尚未删除。

我尝试使用隔离READ_UNCOMMITTED,但它不起作用。

我必须将这两个操作放在同一个事务中,因为任何失败都应该回滚两个操作,我不能提交第一个操作然后继续第二个操作。

我如何在 Spring 框架中做到这一点?

一般在 Hibernate 中,在同一个事务中,while flushing(committing) it always follows a particular order.

Inserts先执行,然后deletes在刷新时执行。

所以在你的情况下是理想的,因为你在 insert 之前是 deleting,只需在 delete 之后显式调用 enitityManager.flush()

或者也可以查看 EntityManager.setFlushMode() 方法,您可以在其中将刷新模式类型设置为 commitauto