java Hibernate:在社交网络中映射用户朋友关系
我花了很长时间试图解决这个问题,通过谷歌搜索,很多人都有类似的问题
我正在尝试使用Hibernate对社交网络中的用户进行建模,对于社交网络来说,还有什么比映射友谊关系更基本的呢? 系统中的每个用户都应该有一个朋友列表,我认为这可能是一个非常简单的任务(只需使用多人关系,对吗?)。因此,我继续尝试以下方法:
@Entity
@Table(name="users")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="userid")
protected Long id = null;
@ManyToMany
protected List<User> friends = null
}
现在的问题是,它告诉我,我错误地使用了很多,因为我没有明确区分朋友和被朋友。到目前为止还不错,我得到了错误,但是我怎么能做我想做的呢
有什么想法吗?我已经智穷到极点了
# 1 楼答案
这当然是个好办法,但我还没有完全被说服。基本上,为了得到朋友,我不得不合并这两个系列,这是非常不令人满意的
难道绝对没有办法在hibernate中创建幂等的反身关系吗
# 2 楼答案
我今天也有同样的问题
应该没问题,我使用了类似的结构。然而,我遇到了延迟加载异常,当将fetchType设置为EAGER时,我收到了关于行李递归初始化的投诉
我如何解决我的问题:在用于获取“用户”的查询中,执行以下操作:
这将初始化该实体的朋友列表。但请注意,它不会初始化这些朋友中的任何朋友。这其实是件好事
# 3 楼答案
多对多的事实是,它需要多一点配置,因为Hibernate必须生成一个关系表。 试试这个:
希望它能奏效()
编辑:另外,对获取类型要非常小心。。。您可以输入一个脱离控制循环的用户,并获取所有数据库
# 4 楼答案
说得好,事实上我试过了。问题是,然后我收到了一个关于mappedBy属性设置在关系双方的投诉,这是正确的,但无效。 我想知道一个简单的
@ManyToMany
和一些聪明的自定义查询来获取朋友是否是一个解决方案:ManyToMany
将生成一个包含user_id
和friend_id,
的联接表,但查询将匹配其中任何一个字段,并返回所有匹配friend_id
或user_id
的用户。 有什么想法吗# 5 楼答案
ManyToMany
注释有一个mappedBy参数。我猜是这样的可能有用。在任何情况下,请参见docs
编辑:
似乎一种多对多的关系需要从两端都能接触到。目前,您只能从一端访问。也许你也应该加上另一个关系:
如果这不起作用,您可以始终引入一个单独的类来表示两个用户之间的关系,并让每个用户都拥有该类的实例集合