【问题标题】:Hibernate bidirectional @ManyToMany deletes "targetEntity" on cascade removeHibernate 双向 @ManyToMany 在级联删除时删除“targetEntity”
【发布时间】:2014-04-24 07:45:11
【问题描述】:

在 2 个实体之间的双向多对多映射中

@Entity
@Table(name = "TB_REGION")
public class RegionEntity implements Region {
    @Id
    @Column(name = "REGION_TOKEN", length=20)
    private String token = null;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "regions", cascade = CascadeType.REMOVE, targetEntity=MutationEntity.class)
    private List<Mutation> mutations;
}

@Entity
@Table(name = "TB_MUTATION")
public class MutationEntity implements Mutation {
    @Id
    @Column(name = "MUTATION_ID", length=22, nullable = false)
    private Integer id;

    @ManyToMany(targetEntity=RegionEntity.class, fetch=FetchType.LAZY, cascade=CascadeType.REMOVE)
    @JoinTable(
            name="TB_MUTATION_REGION",
            joinColumns={@JoinColumn(name="MR_MUTATION", referencedColumnName="MUTATION_ID")},
            inverseJoinColumns={@JoinColumn(name="MR_REGION", referencedColumnName="REGION_TOKEN")})
    private List<Region> regions;
}

当我尝试时

entityManager.remove(region);

区域休眠 1) 删除所有引用该区域的 TB_MUTATION_REGION 行,然后 2) 尝试从 JoinTable TB_MUTATION_REGION 中删除已删除行中引用的所有 TB_MUTATION

这又会导致违反约束的异常,因为那些 TB_MUTATION 条目仍在其他地方使用

是什么导致 hibernate 尝试删除那些 TB_MUTATION,删除 TB_MUTATION_REGION (joinTable) 的东西似乎是一个合理的默认行为,并且是我所期望的

我怀疑我可能(曾经)/正在错过一个

@JoinTable(name="TB_MUTATION_REGION")

因此休眠尝试 1) 级联删除 TB_MUTATIONs 2) 在删除突变之前它尝试删除 TB_MUTATION_REGIONs 3) 然后删除了它尝试删除 TB_MUTATIONs 4) 最终导致约束违规

所以我现在的假设是我什至不需要 cascade=CascadeType.REMOVE,并且只需在区域侧休眠时使用 @JoinTable 就会自动从可连接中删除,对吗?

ps。 我试着用谷歌搜索,但我找不到明确的答案,因为还有一百万个关于 ManyToMany 的其他问题阻塞了结果

pps。 我以后可能会自己尝试一下,但现在我正忙于其他事情

【问题讨论】:

    标签: hibernate jpa many-to-many cascade jointable


    【解决方案1】:

    对于您想要的行为(删除区域不应删除突变),您应该删除 RegionEntity 类上的 cascade 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2014-03-31
      • 2015-03-24
      相关资源
      最近更新 更多