让JPA执行实际的"在删除set null"

时间:2014-05-08 14:24:56

标签: java jpa

手动编写数据库模式时,可以将外部关系级联设置为"在delete set null"。

我已经搜索了Stackoverflow并谷歌寻找答案,但我找不到它:你如何让JPA做同样的事情?

所以,当我与@OneToOne,@ OneToMany或@ManyToMany建立关系时,CascadeType会实现这个目标,还是我需要做的其他事情?

举个例子,拿走House和Person这个对象。房子可以选择拥有一个人。但假设老板死了。众议院实例应该仍然存在,但是"所有者"字段(类型为Person)应该简单地设置为null。

可以使用JPA自动完成吗?

1 个答案:

答案 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带注释的方法,并在会话结束时提交这两个实体。