Java 如何创建正确的JPA多对多关系

Java 如何创建正确的JPA多对多关系,java,database,jpa,Java,Database,Jpa,我在数据库中有一个“子类别”表和一个“项目”表。一个项目可以有多个子类别,一个子类别可以有多个项目 在使用JPA时,如果我删除一个子类别,它不仅会删除关系(从映射表中),还会删除所有相关项 我需要的是,删除子类别而不删除项目。但如果该子类别是与项目关联的唯一子类别,则该项目也应删除 请检查图像 因此,在这里,如果我删除子类别1,那么只有Item1应该与它一起删除。(在当前情况下,它也会删除Item2) 这是我的密码: SubCategory.java的一部分 @Entity @Table(na

我在数据库中有一个“子类别”表和一个“项目”表。一个项目可以有多个子类别,一个子类别可以有多个项目

在使用JPA时,如果我删除一个子类别,它不仅会删除关系(从映射表中),还会删除所有相关项

我需要的是,删除子类别而不删除项目。但如果该子类别是与项目关联的唯一子类别,则该项目也应删除

请检查图像

因此,在这里,如果我删除子类别1,那么只有Item1应该与它一起删除。(在当前情况下,它也会删除Item2)

这是我的密码:

SubCategory.java的一部分

@Entity
@Table(name = "sub_category")
@JsonIgnoreProperties({"items"})
public class SubCategory extends AuditModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(columnDefinition = "TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",
            nullable = false)
    private String name;

    @ManyToMany(mappedBy = "subCategories", cascade = CascadeType.ALL)
    private List<Item> items = new ArrayList<>();
}
@实体
@表(name=“子类别”)
@JsonIgnoreProperties({“items”})
公共类子类别扩展了AuditModel{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(columnDefinition=“文本字符集utf8mb4整理utf8mb4\u unicode\u ci”,
可空=假)
私有字符串名称;
@ManyToMany(mappedBy=“subCategories”,cascade=CascadeType.ALL)
私有列表项=新的ArrayList();
}
java的一部分

@Entity
@Table(name = "Item")
public class Item extends AuditModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(columnDefinition = "TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",
            nullable = false)
    private String name;

    @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
    private List<SubCategory> subCategories = new ArrayList<>();

}
@实体
@表(name=“Item”)
公共类项扩展了AuditModel{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(columnDefinition=“文本字符集utf8mb4整理utf8mb4\u unicode\u ci”,
可空=假)
私有字符串名称;
@ManyToMany(cascade={CascadeType.MERGE,CascadeType.PERSIST})
私有列表子类别=新建ArrayList();
}
PS:我尝试删除cascadeType,但它不起作用,因为一个项目必须至少有一个子类别

看看这个看看这个