roq*_*str 5 sql oracle mapping hibernate jpa
所以我已经注意到没有简单的解决方案可以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;
}
Run Code Online (Sandbox Code Playgroud)
这是它在 SQL 中的工作方式:
ALTER TABLE EMPLOYEE
ADD CONSTRAINT CONSTRAINTNAME FOREIGN KEY (BOSS)
REFERENCES EMPLOYEE (ID)
ON DELETE SET NULL;
Run Code Online (Sandbox Code Playgroud)
我不希望没有老板的人也被解雇,我只是希望他们不再提及他们以前的老板。我看到了使用 @PreRemove 的解决方案,但我不确定这是否与我打算的一样。
提前致谢!
是的,这@PreRemove()是一个好方法。但你需要在反面有双向关联,这意味着Employee应该有一个@OneToManywith Employee(受监督的员工)。然后添加这个方法Employee:
@PreRemove
private void removeAssociationsWithChilds() {
for (Employee e : employees) {
e.setBoss(null);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您不想进行相反的跟踪,也就是说,如果您不想使用 来获得老板监督下的员工列表@OneToMany,那么您必须在删除之前通过 HQL 手动执行此操作,比如update Employee e set e.boss = null where e.boss = ?,然后删除boss。
| 归档时间: |
|
| 查看次数: |
3558 次 |
| 最近记录: |