gpt4 book ai didi

java - Hibernate:在不同的 session 中更新相同的对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:21 24 4
gpt4 key购买 nike

我正在尝试这样做但没有成功,任何人都可以告诉我我错在哪里吗?最后我失去了第一次更新

    EntityManager entityManager1 = JPAUtil.getEntityManagerFactory().createEntityManager();
EntityManager entityManager2 = JPAUtil.getEntityManagerFactory().createEntityManager();

Session session1 = (Session) entityManager1.getDelegate();
Prova prova1 = session1.load(Prova.class, "020");

Session session2 = (Session) entityManager2.getDelegate();
Prova prova2 = session2.load(Prova.class, "020");

prova2.setDes(prova2.getDes() + " 2");
prova1.setShortdes(prova1.getShortdes() + " 1");

Transaction t2 = session2.beginTransaction();
session2.update(prova2);
t2.commit();
session2.close();

Transaction t1 = session1.beginTransaction();
session1.update(prova1);
t1.commit();
session1.close();

最佳答案

正如之前的回答,你总是需要在保存之前检查对象的版本。 Hibernate 或 JPA 具有称为乐观锁定 的功能来解决此问题。有关详细信息,请参阅以下代码和链接。

@Entity
public class Employee
{
@Id
@GeneratedValue
private Integer id;
@Version
private long version;
private String name;
}

当您创建员工记录时,框架会自动创建版本值。首先让我们假设值是

[1, 0, "name1"]

更新后变为

[1, 1, "name2"]

在下次更新时它变为

[1, 2, "name3"]

如果您尝试使用错误的版本更新数据,框架将抛出​​异常

链接有关于此的更多信息 https://www.logicbig.com/tutorials/java-ee-tutorial/jpa/optimistic-lock.html

关于java - Hibernate:在不同的 session 中更新相同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54732774/

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