gpt4 book ai didi

java - 如果修改父对象的一对多关系,则父对象的版本不会增加

转载 作者:行者123 更新时间:2023-11-30 04:34:57 26 4
gpt4 key购买 nike

我使用 EclipseLink 作为 JPA 提供程序。我面临的问题是,每当在父对象中添加/删除子对象时,版本属性都不会更新。

有一个类公司。 Company 类有一个属性 Set。 Company 类有一个版本字段。每当我更新任何非关系属性时,Company 实例的版本字段都会递增。但是,如果我将 Employee 类的实例添加到一对多集合员工中,则 Company 实例的版本字段不会增加。基本上,如果将子对象添加到父对象或从父对象中删除,则父对象的版本不会增加。

@Entity
class Company {
@Id
private long id;
private String name;
@Version
private Integer version;
@OneToMany(mappyedBy="company", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Employee> employees;
//
// setter / getter methods
}

@Entity
class Employee {
@Id
private long id;
private String name;
@ManyToOne
@JoinColumn(name = "compid")
private Company company;
//
// setter / getter methods
}

如果将子对象添加到父对象或从父对象中删除,Hibernate 会增加父对象的版本。

EclipseLink 不应该有同样的行为吗?我错过了什么吗?

提前致谢。

最佳答案

默认情况下,每当任何直接字段或“拥有”关系发生变化时,EclipseLink 都会增加锁定。我相信这就是 JPA 规范的规定。使用“mappedBy”的 OneToMany 不被视为拥有关系,因此默认情况下不会导致版本增量。

您可以使用以下方式进行配置:(导致对任何关系或依赖对象的任何更改都会增加版本)

@OptimisticLocking(cascade=true)

您还可以使用 DescriptorCustomizer 进行设置(导致任何关系的任何更改都会增加版本)

descriptor.getOptimisticLockingPolicy().setLockOnChangeMode(LockOnChange.ALL)

关于java - 如果修改父对象的一对多关系,则父对象的版本不会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13721354/

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