spring - 删除多对多关系中的记录 spring data jpa

标签 spring spring-data spring-data-jpa

我有两个实体。 A 和 B。AB 之间的关系是 @ManyToMany。因此,我根据项目需要引入了用于 @ManyToMany 关系的第三个实体 C

我的实体类如下所示。

@Entity
class A
{
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "a")
    List<C> cList;
}

@Entity
class B
{
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "b")
    List<C> cList;
}

@Entity
class C
{
    @ManyToOne
    @JoinColumn(name = "ref_a")
    A a;

    @ManyToOne
    @JoinColumn(name = "ref_b")
    B b;
}

现在,我想删除实体AB的记录,然后它应该从C删除相应的记录。 但是当我删除 AB 的记录时,它显示

Cannot delete or update a parent row: a foreign key constraint fails

需要什么其他配置才能从 AB 中删除记录,并且还会从 C 中删除相应的记录?

最佳答案

您不必创建实体来映射多对多表。 ManyToMany JPA 注释就在那里。以下是如何执行此操作的示例。

@Entity
public class Team {
    @ManyToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST }, mappedBy="teams")
    private List<Match> matches;
}

@Entity
public class Match {
    @ManyToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST })
    @JoinTable(
            name="MATCH_TEAM",
            joinColumns={@JoinColumn(name="MATCH_ID", referencedColumnName="ID")},
            inverseJoinColumns={@JoinColumn(name="TEAM_ID", referencedColumnName="ID")})
    private List<Team> teams;
}

关于spring - 删除多对多关系中的记录 spring data jpa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30391301/

相关文章:

spring - 在我的 JUnit 测试中,如何验证 Spring RedirectView?

java - Spring Autowired 组件在 bean 方法中为 null

javascript - 从 GraalVM Java/Spring 运行基于 Javascript 的 CSS 缩减实用程序

java - Spring Boot中@Transactional的理解-抛出异常更改不会在数据库中回滚

java - CrudRepository : find by multiple related entities

java - Spring Data/Hibernate native 查询返回 null,即使实际查询返回结果

spring - Grails:将 FixtureLoader 注入(inject)规范

使用交叉连接的 Hibernate 删除查询

java - 如何插入 780k 记录 Spring Data Postgres

java - 如何配置嵌入式 MongoDB 并进行身份验证以在 Spring Boot 集成测试中使用?