Hibernate 休眠一通多址/多通删除级联
我正试图建立一种一对一/多对一的关系。除删除操作外,所有操作均按预期工作,这意味着当删除所有者侧时,非所有者侧也会被删除 有没有办法防止这种行为,因此如果删除了所有者侧,非所有者侧的所有者侧id将设置为NULL 伪码Hibernate 休眠一通多址/多通删除级联,hibernate,Hibernate,我正试图建立一种一对一/多对一的关系。除删除操作外,所有操作均按预期工作,这意味着当删除所有者侧时,非所有者侧也会被删除 有没有办法防止这种行为,因此如果删除了所有者侧,非所有者侧的所有者侧id将设置为NULL 伪码 public class OwningSide { @OneToMany( cascade = {CascadeType.ALL}, mappedBy = "owningSide") @LazyCollection(LazyCollectionOp
public class OwningSide {
@OneToMany(
cascade = {CascadeType.ALL},
mappedBy = "owningSide")
@LazyCollection(LazyCollectionOption.FALSE)
@JsonManagedReference
private List<NonOwningSide> nonOwningSide;
}
public class NonOwningSide {
@ManyToOne(
cascade = {CascadeType.ALL},
fetch = FetchType.EAGER)
@JoinColumn(name = "owningSide_id")
@JsonBackReference
private OwningSide owningSide;
}
公共类所有者侧{
@独身癖(
cascade={CascadeType.ALL},
mappedBy=“owningSide”)
@LazyCollection(LazyCollectionOption.FALSE)
@JsonManagedReference
私有列表非所有方;
}
公共类非所有者侧{
@许多酮(
cascade={CascadeType.ALL},
fetch=FetchType.EAGER)
@JoinColumn(name=“owningSide\u id”)
@JsonBackReference
私人所有;
}
您必须将cjild的对象显式设置为null
for (NonOwningSide child : OwningSide.getChildren()) {
child.setNonOwningSide(null);
}
删除(OwningSide) 第一次更改级联=级联类型。在自己的一侧保持
public class OwningSide {
@OneToMany(
cascade = {CascadeType.PERSIST}, mappedBy = "owningSide")
@LazyCollection(LazyCollectionOption.FALSE)
@JsonManagedReference
private List<NonOwningSide> nonOwningSide;
}
public class NonOwningSide {
@ManyToOne(
cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@JoinColumn(name = "owningSide_id")
@JsonBackReference
private OwningSide owningSide;
}
要做到这一点,当您创建表并将外键添加到NonOwningSide时,请将cascade type指定为set null以删除owningSide,如下所示
--这一次,在delete set null上使用创建它:
alter table NonOwningSide add constraint constraintName
foreign key (id) references OwningSide(id) on delete set null
当然不要使用cascade=ALL,它精确地告诉Hibernate做你不想做的事情。并确保在删除之前没有非所有者侧引用所有者侧。如果我从所有者侧删除CascadeType.ALL,则非所有者侧的所有者侧id在创建/更新操作时将保持为空。级联不是填充非所有者侧的所有者侧字段的内容。无论如何,不使用cascade=ALL并不意味着不能使用任何级联。CascadeType注释中还有许多其他值。
alter table NonOwningSide add constraint constraintName
foreign key (id) references OwningSide(id) on delete set null