【发布时间】:2021-11-17 14:31:19
【问题描述】:
我有一个被其他几个实体引用的实体地址,例如:
@Entity
class Office {
@OneToOne
private Address address;
...
}
@Entity
class Home {
@OneToOne
private Address address;
...
}
在哪里
@Entity
class Address {
@Id
private Long id;
private String street;
private String zipCode;
...
}
在其他实体中引用 Address 的字段可以为空,所以我希望当 Office.address 设置为 null 时,从数据库中删除引用的实体。
这类似于 orphanRemoval 的工作方式,但在我的情况下,我需要删除 parent 类 (Address) 实例,而不是 child .
有没有办法使用声明性方式来实现这一点,或者我应该手动删除未引用的Addresses?
注意事项
-
每次创建新的办公室/家庭/等时都会创建一个新地址。被建造。 (没有其他实体引用的共享地址。)
-
我尝试将 orphanRemoval 应用于
@OneToOne注释,但将address字段设置为 null 不会触发 (Address) 实体从数据库中删除。 -
我已经检查了这个答案:https://stackoverflow.com/a/31471415/1061499,但这不适用于我的情况。我的
Address类中不能包含交叉引用。
【问题讨论】:
-
您在家庭和办公室中使用相同的地址?如果是,那么它是多对一而不是单对一。如果没有,那么您可以使用孤儿删除
-
@SimonMartinelli 不,不一样:每次创建新的办公室/家庭时都会创建一个新地址。我尝试将 orphanRemoval 应用于 OneToOne,但将地址字段设置为 null 不会触发要从数据库中删除的(地址)实体。