Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠多对多关系和级联删除_Java_Hibernate - Fatal编程技术网

Java 休眠多对多关系和级联删除

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

使用Hibernate,我有以下类:

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也不推荐使用。