【问题标题】:Spring Transactional annotation, isolation not working for READ_UNCOMMITTEDSpring事务注释,隔离不适用于READ_UNCOMMITTED
【发布时间】:2016-09-19 20:30:55
【问题描述】:

我有一个用 spring Transactional 注释包装的 Java 方法。

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

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

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

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

【问题讨论】:

    标签: java spring jakarta-ee spring-transactions transactional


    【解决方案1】:

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

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

    所以理想情况下,由于您在 insert 之前是 deleting,因此只需在 delete 之后显式调用 enitityManager.flush()。

    也可以查看EntityManager.setFlushMode() 方法,您可以将刷新模式类型设置为commit 或auto

    【讨论】:

    猜你喜欢
    • 2018-05-04
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2016-11-17
    • 2021-11-15
    • 2014-08-31
    相关资源
    最近更新 更多