gpt4 book ai didi

java - Hibernate 事务计数器行为

转载 作者:行者123 更新时间:2023-12-02 04:45:38 27 4
gpt4 key购买 nike

我有以下 JPA 实体:

@Entity(name="metrics")
public class Metrics {

@Id
private String metricId;

@Column
private long count;

public Metrics() {
count = 0;
}

我尝试像这样自动更新它:

//Begin transaction
Metrics result = em.find(Metrics.class, id);

if (result == null) {
result = new Metrics();
result.metricId = id;
result.count++;
em.persist(result);
} else {
result.count++;
em.merge(result);
}
//Commit transaction

但是由于某种原因,这似乎并没有使更新成为原子的,并且我最终在并发环境中丢失了更新。我可以通过使用 @Version 通过 Hibernate 实现乐观锁定来解决这个问题,但我有点惊讶这是必需的。

为什么上面的代码即使有事务也会丢失更新?

最佳答案

你是对的,如果你想在数据库中准确地保存有效值,那么只有乐观或悲观锁定可以帮助你。在您的情况下,悲观锁定会更好,因为应用程序在竞争环境中工作,但乐观锁定会一次又一次抛出异常。应用服务器重启或挂起后,Atomic 的所有优点都会消失。

关于java - Hibernate 事务计数器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29683267/

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