gpt4 book ai didi

sql - JPA/hibernate : on delete set null

转载 作者:行者123 更新时间:2023-12-04 22:14:45 26 4
gpt4 key购买 nike

所以我已经注意到没有简单的解决方案可以使用 on delete set null使用 JPA,但我听说可能有解决方法。
我的问题是下一个(这里有点抽象,但我希望它仍然有意义):

想象一下有 员工 .每个员工都知道自己的老板 ,但反过来不行。老板本身就是员工。

我想要完成的事情:

如果老板被解雇,在他手下工作的每个人都会失去他的老板(显然)。

@Entity
@Table(name = "employee")
public class Employee
{
@Column (name = "id" )
private String id;

@OneToOne
@JoinColumn( name = "boss" )
private employee boss;
}

这是它在 SQL 中的工作方式:
ALTER TABLE EMPLOYEE
ADD CONSTRAINT CONSTRAINTNAME FOREIGN KEY (BOSS)
REFERENCES EMPLOYEE (ID)
ON DELETE SET NULL;

我不希望没有老板的人也被解雇,我只是希望他们不再提及他们以前的老板。
我看到了使用 @PreRemove 的解决方案,但我不确定这是否与我打算的一样。

提前致谢!

最佳答案

@PreRemove()是个好办法。
但是你需要在反面有双向关联,意思是Employee应该有一个 @OneToManyEmployee (受监督的员工)。然后在Employee中添加这个方法:

@PreRemove
private void removeAssociationsWithChilds() {
for (Employee e : employees) {
e.setBoss(null);
}
}

但是,如果您不想跟踪相反的一面,这意味着如果您不想使用 @OneToMany 获得老板监督下的员工列表,那么您必须在删除前通过 HQL 手动执行此操作,例如 update Employee e set e.boss = null where e.boss = ? ,然后删除老板。

关于sql - JPA/hibernate : on delete set null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27106274/

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