【问题标题】:Query to delete relationship table查询删除关系表
【发布时间】:2021-06-13 22:17:00
【问题描述】:

我有一个使用 JpaRepository 的 Spring Boot 项目。

我有两个实体,威胁和维度,在数据库中我有 3 个表: tbl_threat、tbl_dimension 和 tbl_threat_dimension(与每个威胁的维度有关)

我想删除 thread_dimension 表中的关系行。我该如何解决这个问题?

@Entity(name = "tbl_threat")

公共类威胁{

@Id
private String id;

@Column(nullable = false)
private String name;

@ManyToOne
private User user;

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "threat_dimension", joinColumns = {
        @JoinColumn(name = "threat_id")}, inverseJoinColumns = {
        @JoinColumn(name = "dimension_id")})
private List<Dimension> dimensions;


@Entity(name = "tbl_dimension")

公共类维度{

@Id
private String id;

@Column(nullable = false)
private String name;

}

【问题讨论】:

    标签: java postgresql


    【解决方案1】:

    要指定表名,您应该使用@Table(name = "table_name")。保留@Entity注解,但设置name@Entity不用于指定表名。

    查看此答案,了解为@Entity@Table 设置name 之间的区别:https://stackoverflow.com/a/18732732/2464528

    【讨论】:

      【解决方案2】:

      我的猜测是您在维度类中缺少映射Set&lt;Thread&gt;,因为这是多对多关系。使用适当的@mappedBy 注释,删除也应该删除对应的关系条目。

      我还建议您使用Set&lt;Dimensions&gt; 而不是List&lt;Dimensions&gt;。迟早你会遇到很多性能问题。见:Hibernate Many to Many Relations Set Or List?

      还请记住,CascadeType.ALL 还包括导致删除的 CascadeType.REMOVE,例如与特定维度有关系的所有线程条目。见:How to delete a row in join table with JPA

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多