gpt4 book ai didi

java - 在 Web 组件中使用 JPA 锁

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:40 24 4
gpt4 key购买 nike

我了解 JPA 锁的原理(乐观和悲观),但注意到您应用于实体管理器、查询等的所有锁始终位于服务器端。所有 EJB 都位于服务器上,因此它们使用的事务也被锁定在服务器上。

假设,您的电子商务网站的客户想要更改他的数据。用户在客户端中填写他的更改(例如facelets),然后通过将它们发送到服务器来提交它们,然后服务器获得锁定。但是,如果管理员在初次读取和获取锁定之前更改了客户数据怎么办?这会导致脏读

那么如何将锁定机制扩展到 Web 层呢?
我在网上没有找到一个选项,但如果没有它,当前的 JPA 锁定 API 将毫无用处,不是吗?

最佳答案

为了避免脏读,但又不阻塞实体,可以利用 JPA 的一个称为“版本锁定”的功能,即使用 @Version 向实体类添加一个属性。

简单示例:

@Entity
public class Persona implements Serializable {
//... other properties

@Version
@Column(name="VERSION")
private long version;

// getters and setters
}

现在,如果有人在您之前更新了数据,然后尝试更新数据,JPA Engine 会抛出异常,表明其他人并更新了信息。此选项可防止可能导致整个应用程序性能不佳的阻塞

关于java - 在 Web 组件中使用 JPA 锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38679285/

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