gpt4 book ai didi

java - JPA 独立模式 - 在 EntityTransaction 之外更改托管实体字段有效 - 为什么?

转载 作者:行者123 更新时间:2023-12-04 05:27:16 25 4
gpt4 key购买 nike

我正在以独立模式(由 Hibernate 支持)试验 JPA。我注意到以下代码成功地将数据库值更改为“乱码”:

A a = em.find(A.class, 1);
a.setA1("garbled");
entityTransaction.begin(); // line 3
entityTransaction.commit(); // line 4
em.close();

第 3 行 之前没有其他事务begin()API spec for EntityTransaction 中使用的语言在用 begin()commit() JPA 实体事务的模型中似乎有其他指示,或者有些东西可能有点违反直觉强>?请注意,34 行是必需的,因为将它们注释掉不会更改数据库值。

最佳答案

a 在您的示例中是与 em 实例相关联的托管实体,可以在事务边界之外进行修改,并将作为从同一事务提交事务的一部分保留实体管理器实例。事务边界仅定义提交事务时进入数据库的内容以及事务失败时恢复对数据库所做的更改。假设您在示例中失败了事务,a 仍会进行更改,只是数据库不会有这些更改,因此对其他人不可见。

如果您期望托管实体不应该在事务边界之外修改,或者在事务边界之外对它们的任何更改不应该被持久化,那么那是不正确的。托管实体的生命周期与其实体管理器相关联。

关于java - JPA 独立模式 - 在 EntityTransaction 之外更改托管实体字段有效 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com