当前位置: 首页 > 知识库问答 >
问题:

Spring Data jpa-manytomany-delete连接表的实体

宋望
2023-03-14
public class ClassA extends [...] implements [...] {
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = JOIN_TABLE_NAME,
            joinColumns = @JoinColumn(name = COLUMN_REF_A, referencedColumnName = COLUMN_ID_A),
            inverseJoinColumns = @JoinColumn(name = COLUMN_REF_B, referencedColumnName = COLUMN_ID_B))
    private List<ClassB> fieldClassB;   
}

public class ClassB extends [...] implements [...] {
    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "fieldClassB", cascade = CascadeType.ALL)
    private List<ClassA> fieldClassA;

}

共有1个答案

狄钧
2023-03-14

manyToMany中的级联移除它不仅应用于链接表,还应用于关联的另一边。

Cascade.所有继承remove的对象在manyToMany上几乎总是一件坏事,因为它最终不仅从关联表中删除了一些东西。

您希望在实体中使用add and remove方法来完成这项工作,并使两个列表保持同步:

public class ClassA extends [...] implements [...] {
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    @JoinTable(name = JOIN_TABLE_NAME,
            joinColumns = @JoinColumn(name = COLUMN_REF_A, referencedColumnName = COLUMN_ID_A),
            inverseJoinColumns = @JoinColumn(name = COLUMN_REF_B, referencedColumnName = COLUMN_ID_B))
    private List<ClassB> fieldClassB; 

    public void addClassB(ClassB b) {
        fieldClassB.add(b);
        b.fieldClassA().add(this);
    }

    public void removeClassB(ClassB b) {
        fieldClassB.remove(b);
        b.fieldClassA().remove(this);
    }  
}
 类似资料:
  • 我有这些实体: 用户 角色 权限 一个用户有很多角色,一个角色有很多权限。 null

  • 问题内容: 我必须在设计糟糕的旧数据库中应用JPA。不幸的是无法更改它。幸运的是,仅用于只读访问。 我发现的最奇怪的事情之一是没有联接(或中间)表的“多对多”关系。这是表结构的简化: ACCESS_GROUP列可以在两个表中重复 一位用户可以与N个访问相关 一个访问可以与N个用户相关 必须按照这种方式“概念上”将此表与Java类映射: 但是我认为这是不可能的。您认为在JPA中访问此表并进行浏览的最

  • 问题内容: 我必须在设计糟糕的旧数据库中应用JPA。不幸的是无法更改它。幸运的是,仅用于只读访问。 我发现的最奇怪的事情之一是没有联接(或中间)表的“多对多”关系。这是表结构的简化: ACCESS_GROUP列可以在两个表中重复 一位用户可以与N个访问相关 一个访问可以与N个用户相关 必须按照这种方式“概念上”将此表与Java类映射: 但是我认为这是不可能的。您认为在JPA中访问此表并浏览它们的最

  • 我们与实体1和实体2有多对多的关系。 现在,当我们删除Entity2的一个元素时,实际上并不是从数据库中删除它,而是简单地将字段“isactive”设置为false。 在SQL中,这将转换为entity1表、entity2表和entity1TOentity2表。在SQL中,我们可以简单地进行一次更新, 在JPA中,我们可以将Entity1的所有元素作为对象加载,并对关系进行连接提取,然后在Java

  • 我正在用python制作一个连接4 AI,并且我正在使用带有迭代深化和alpha beta修剪的minimax。对于更深的深度,它仍然很慢,所以我想实现一个换位表。阅读后,我想我得到了大致的想法,但我无法完全使其工作。这是我代码的一部分:(最小最大值的最大化部分): 现在我用zobrist散列方法散列板,我使用有序的判决将散列板添加到。在这个哈希键中,我添加了板的值和该板的最佳移动。不幸的是,这似

  • 我在两个实体之间有很多关系。 作者- 代码如下: 现在,当我尝试执行以下操作时,我得到以下错误: 书刀。删除(书籍);\n错误:无法删除或更新父行:外键约束失败(,约束外键()引用() 我搜索了整个网络,堆栈溢出,但似乎找不到答案。任何人如有此问题,也将不胜感激。