手动编写数据库模式时,可以将外部关系级联设置为"在delete set null"。
我已经搜索了Stackoverflow并谷歌寻找答案,但我找不到它:你如何让JPA做同样的事情?
所以,当我与@OneToOne,@ OneToMany或@ManyToMany建立关系时,CascadeType会实现这个目标,还是我需要做的其他事情?
举个例子,拿走House和Person这个对象。房子可以选择拥有一个人。但假设老板死了。众议院实例应该仍然存在,但是"所有者"字段(类型为Person)应该简单地设置为null。
可以使用JPA自动完成吗?
答案 0 :(得分:0)
我认为,一种可能的方法是使用实体生命周期回调之一。
class Person {
@PreRemove
protected void makeHouseOnSale() {
if (owning!= null) {
owning.owner = null;
}
}
@OneToOne
private House owning;
}
class House {
@OneToOne(
//optional = true; // default
)
private Person owner;
}
在Person
会话中删除(kill)JTA
实例时,会调用@PreRemove
带注释的方法,并在会话结束时提交这两个实体。