【问题标题】:Hibernate many to many removing entries in join table while update owner table在更新所有者表时休眠多对多删除连接表中的条目
【发布时间】:2013-08-20 19:09:58
【问题描述】:

我正在尝试更新与另一个表具有多对多关系的实体。

           @Entity(name = "coaching")
         public class CoachingEntity {


@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REFRESH })
    @JoinTable(name = "coaching_field", joinColumns = @JoinColumn(name = "coachingId",    referencedColumnName = "coachingId"), inverseJoinColumns = @JoinColumn(name = "fieldId", referencedColumnName = "fieldId"))
   private Set<FieldEntity> fieldEntityList;

现在,当我更新 CoachingEntity 时,hibernate 正在从 coaching_field 表(多对多连接表)中删除条目。我在互联网上搜索过 (JPA update many-to-many deleting records) 但我找不到正确的方法。即使在JPA many to many merge on the owner triggers delete on join table,我也尝试了他推荐的方法,他使用了 set,但我面临同样的问题。根据https://stackoverflow.com/a/1078295/2116229,我需要覆盖equals 和hashcode 吗?

【问题讨论】:

    标签: hibernate jpa many-to-many


    【解决方案1】:

    您需要覆盖实体中的 equals() 和 hashCode(),否则迟早会遇到问题,尤其是当您的实体是 Set 的一部分时。

    更多详情请参见:https://community.jboss.org/wiki/EqualsAndHashCode

    如果在覆盖 equals() 和 hashCode() 后问题仍然存在,并且您使用的是双向关系;然后,您可能需要在关系的另一侧添加一个 mappedBy 并在持久化之前“链接”这两个对象。查看此答案了解更多详情:Hibernate (4.1.2) and Spring (3.1.2) – ManyToMany relationship does not store records in JoinTable

    【讨论】:

    • 你太正确了...我遵循了您的第二个建议...非常感谢您帮助我... :)
    • 如果有人可以帮助我做 equal 和 hashCode 的多对多关系(与 ID 实体),那就太好了。非常感谢stackoverflow.com/questions/24737145/…
    猜你喜欢
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多