Java 删除集合中的项时,使Hibernate为空,而不是删除联接表行

Java 删除集合中的项时,使Hibernate为空,而不是删除联接表行,java,hibernate,jpa,Java,Hibernate,Jpa,我们有两个DAO实体,Customer和Record 记录有两个客户列表,typeA和typeB 我们每个类模式有一个表,因此有一个联接表RECORD\u X\u CUSTOMER。此表有列记录ID,类型A\U ID,和类型B\U ID 问题是,此联接表中的某些条目在同一表行中同时包含typeA id和typeB id。在应用程序中,如果我们删除一个typeA,并且记录上也有一个typeB,那么它们都将被删除,反之亦然。有没有办法让Hibernate在删除整个表行时使列为空 下面是类注释: @M

我们有两个DAO实体,
Customer
Record

记录有两个客户列表,
typeA
typeB

我们每个类模式有一个表,因此有一个联接表
RECORD\u X\u CUSTOMER
。此表有列
记录ID
类型A\U ID
,和
类型B\U ID

问题是,此联接表中的某些条目在同一表行中同时包含
typeA id
typeB id
。在应用程序中,如果我们删除一个typeA,并且记录上也有一个typeB,那么它们都将被删除,反之亦然。有没有办法让Hibernate在删除整个表行时使列为空

下面是类注释:

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(
    name="TYPEA_X_CUSTOMER"
    , joinColumns={
        @JoinColumn(name="RECORD_ID", referencedColumnName="ID")
        }
    , inverseJoinColumns={
        @JoinColumn(name="TYPEA_ID", referencedColumnName="ID")
        }
    )       
@BatchSize(size=1000)
protected List<Customer> typeA;

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(
    name="TYPEB_X_CUSTOMER"
    , joinColumns={
        @JoinColumn(name="RECORD_ID", referencedColumnName="ID")
        }
    , inverseJoinColumns={
        @JoinColumn(name="TYPEB_ID", referencedColumnName="ID")
        }
    )
@BatchSize(size=1000)
protected List<Customer> typeB;
@ManyToMany(cascade=CascadeType.ALL)
@可接合(
name=“TYPEA\u X\u客户”
,连接柱={
@JoinColumn(name=“RECORD\u ID”,referencedColumnName=“ID”)
}
,反向连接列={
@JoinColumn(name=“TYPEA\u ID”,referencedColumnName=“ID”)
}
)       
@批量大小(大小=1000)
A类受保护名单;
@多个(级联=级联类型.ALL)
@可接合(
name=“TYPEB_X_客户”
,连接柱={
@JoinColumn(name=“RECORD\u ID”,referencedColumnName=“ID”)
}
,反向连接列={
@JoinColumn(name=“TYPEB_ID”,referencedColumnName=“ID”)
}
)
@批量大小(大小=1000)
B类受保护名单;

代码与您给出的描述不匹配:它使用两个不同的联接表。真相在哪里?@jbnize对不起,这些只是观点。我不知道这怎么可能。通过将联接表映射为一个实体来精确匹配表并自己处理混乱,或者规范化您的架构以使其看起来像在代码中映射的:两个联接表-每个关联一个。@JBNizet将此添加为答案,我将接受。我们之所以有这样的数据,是因为我们从另一个数据库模式迁移了数据。我希望我们可以用JPA来处理它,而不是写纸条来解决它。谢谢