【问题标题】:Many to many with Hibernate and annotations for self referencing多对多与 Hibernate 和自引用注释
【发布时间】:2012-12-04 17:11:32
【问题描述】:

想到这个,我的大脑开始受伤,是不是很简单:

@ManyToMany(mappedBy = "following", cascade = CascadeType.ALL)
private Set<User> followers = new HashSet<User>();

@ManyToMany(mappedBy = "followers", cascade = CascadeType.ALL)
private Set<User> following = new HashSet<User>();

【问题讨论】:

  • @jenson-button-event 我必须指定链接器表,我不能让休眠选择吗?
  • 您不必这样做,但建议这样做-基于很少您不需要中间的其他列-但是,嘿,这是如何做到的,请确保您指定表和列dzone.com/tutorials/java/hibernate/hibernate-example/…
  • @jenson-button-event 并且您不需要两边都映射
  • 另外,CascadeType.ALL 多对多是一种代码味道。

标签: java hibernate many-to-many


【解决方案1】:

类似:

@ManyToMany(mappedBy = "following", cascade = CascadeType.ALL)
@JoinTable(name="UserRel", 
                joinColumns={@JoinColumn(name="ParentId")}, 
                inverseJoinColumns={@JoinColumn(name="UserId")})
private Set<User> followers = new HashSet<User>();

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="UserRel", 
                joinColumns={@JoinColumn(name="UserId")}, 
                inverseJoinColumns={@JoinColumn(name="ParentId")})
private Set<User> following = new HashSet<User>();

【讨论】:

  • 谢谢,但我刚刚从一个声明中删除了 mappedBy,它可以工作。你不能在两边都有 mappedBy,所以你的例子不起作用
  • 好的,所以它的采摘表和列名按惯例...甜
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多