Java 休眠多对多关系和级联删除
使用Hibernate,我有以下类:Java 休眠多对多关系和级联删除,java,hibernate,Java,Hibernate,使用Hibernate,我有以下类: public class Person { @ManyToMany(fetch=FetchType.LAZY) @Cascade(CascadeType.ALL) @JoinTable(name = "person_address", joinColumns = { @JoinColumn(name = "person_id") }, inverseJo
public class Person {
@ManyToMany(fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
@JoinTable(name = "person_address", joinColumns = { @JoinColumn(name = "person_id") },
inverseJoinColumns = { @JoinColumn(name = "address_id") })
public List<Address> getAddresses() {
return addresses;
}
}
public class Address {
...
@ManyToMany(mappedBy="addresses", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
public List<Person> getPersons() {
return persons;
}
}
公共类人物{
@ManyToMany(fetch=FetchType.LAZY)
@级联(级联类型.ALL)
@JoinTable(name=“person\u address”,joinColumns={@JoinColumn(name=“person\u id”)},
inverseJoinColumns={@JoinColumn(name=“address\u id”)})
公共列表getAddresses(){
返回地址;
}
}
公共课堂演讲{
...
@ManyToMany(mappedBy=“addresses”,fetch=FetchType.LAZY)
@级联(级联类型.ALL)
公众人士名单{
返回人员;
}
}
我的问题是:
删除地址和人之间关系的一个元素,地址的“孤儿”元素也可能被删除。换言之,我不想拥有与某人无关的地址
谢谢,
Marc.
org.hibernate.annotations.CascadeType.DELETE\u orphant
可用于删除孤儿。不,不可能。Hibernate不为多对多关系提供孤立删除功能。为什么要这样做?您可以删除任何实体(个人或地址),Hibernate将根据您定义的注释确保一致性
在这种情况下,手动删除不同表之间的链接是一种不必要的风险。您好,谢谢您的回答。假设你有一个由两个人共享的地址。其中1人改变了地址。因此,地址仅链接到1人之后。在这种情况下,您当然不想删除地址。但如果剩下的人也改变了地址。在这种情况下,初始地址是孤立的,因为在关系中没有任何指向它的链接。在这种情况下,我想将其删除,因为地址本身没有任何意义。不,它不支持此作业,而且org.hibernate.annotations.CascadeType.DELETE\u ORPHAN也不推荐使用。