gpt4 book ai didi

java - 如果我添加/删除/更新可靠集合的元素, hibernate 会增加版本吗?

转载 作者:行者123 更新时间:2023-12-02 09:25:20 28 4
gpt4 key购买 nike

我正在学习hibernate乐观锁机制,但我在user guide中没有找到我的问题的答案

假设我们有这样的实体:

@Entity
class Employee{
@Version
Long versionField;

List<Employee> subordinates;
...

}

在某个地方我们有以下代码:

Employee sub = ....
Emplyee emp = readEmploye();
emp.getSubordinates().add(sub);

在这种情况下我可以控制版本增量吗?

最佳答案

默认情况下没有。因为您没有更改实体,而是更改链接到它的其他实体。

但是,拥有该功能是可能的,但需要大量配置,最好提前规划。我不会复制尊敬的 Vlad Mihalcea see here 的所有代码。 .

基本上,您需要使用事件监听器来拦截保存调用,并使用 RootAware 接口(interface)(不是 Hibernate 接口(interface),只是一个帮助器),被保存的子实体知道其“根”并且可以在其父实体上使用OPTIMISTIC_FORCE_INCREMENT锁来增加其版本。

<小时/>

关于数据一致性:如果子实体被修改或父实体被修改(或两者都被修改),则刷新可能会失败,但根实体上的 lock() 确保操作是原子的。如果根上的(悲观)锁成功,并且子上的(乐观)锁成功,则整个事务会成功。由于悲观锁,没有机会获得会损坏数据的“半更新”。

关于java - 如果我添加/删除/更新可靠集合的元素, hibernate 会增加版本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58381106/

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