【问题标题】:mapping list of Person in another person另一个人的人的映射列表
【发布时间】:2014-02-22 12:23:21
【问题描述】:

我有一个人员实体和两个人员列表,我以这种方式实现(感谢这篇文章:Hibernate many-to-many association with the same entity):

@ManyToMany
@JoinTable(name="tbl_friends",
 joinColumns=@JoinColumn(name="personId"),
 inverseJoinColumns=@JoinColumn(name="friendId")
)
private List<User> friends;

@ManyToMany
@JoinTable(name="tbl_friends",
 joinColumns=@JoinColumn(name="friendId"),
 inverseJoinColumns=@JoinColumn(name="personId")
)
private List<User> friendOf;

但是,使用 @ManyToMany 注释,级联(合并、删除等)不起作用。 有没有办法实现相同的映射但启用级联?

【问题讨论】:

    标签: jpa mapping


    【解决方案1】:

    级联确实适用于多对多关联。但大多数时候,不应该在多对多关联上设置任何级联:因为朋友是很多人的朋友,例如,您不能删除约翰的所有朋友(保罗和马特)当你删除约翰。事实上,许多其他人(Jack、Sarah)也有 Paul 和 Matt 作为朋友,因此会导致违反约束。

    您的代码的问题是映射错误。您在这里有一个单一的双向多对多关联,但您使用相同的连接表将其映射为两个单向多对多关联。

    在双向关联中,一侧必须是相反侧。如果您选择friendOf 作为反面,则应映射为

    @ManyToMany(mappedBy = "friends")
    private List<User> friendOf;
    

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 2011-12-04
      相关资源
      最近更新 更多