【问题标题】:Update uncommitted data using Hibernate使用 Hibernate 更新未提交的数据
【发布时间】:2017-12-22 06:20:53
【问题描述】:

事务中,如果出现故障,是否可以更新未提交的数据并提交而不是回滚事务?

【问题讨论】:

    标签: spring hibernate spring-data spring-data-jpa jta


    【解决方案1】:

    不。这是不可能的,而且有很好的理由。

    当您在刷新 JPA 和 Hibernate Persistence 上下文时遇到异常时,不清楚有多少实体状态转换已同步,哪些状态转换根本没有被刷新。

    就像ACID transaction should be atomic 一样,JPA 工作单元(持久性上下文)也应该是原子的。

    试图打破这种行为是一种数据访问设计气味,它告诉你有更好的解决方案来解决导致你提出这个问题的原始问题。

    【讨论】:

    • 让事务管理器回滚事务并在不同的表中插入记录以供审计跟踪是不是更好?
    • 嗯,回滚事务意味着数据库重做日志中不会有任何条目,因此审计日志不应标记不存在的数据库更改。但是,如果您需要使用事件溯源,那么您可以记录所有命令,无论它们是成功还是失败。为此,您需要在使用 JPA 和 Hibernate 打开一个单独的事务之前使用一个单独的事务。
    • 是否有任何与传播等效的 jta - requires_new 或如何以编程方式完成?
    猜你喜欢
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多