首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate自连接第二个表,并在一个集合中获得所有结果

Hibernate自连接第二个表,并在一个集合中获得所有结果
EN

Stack Overflow用户
提问于 2013-09-18 23:17:03
回答 1查看 383关注 0票数 1

我不知道这是不是可以做到。我看了很多论坛和帖子,我不认为这是可能的,但我也没有看到我的具体用例。

我需要能够将一个表映射到自身,在两个记录之间创建一个链接。

这不是父子关系。在这种情况下,它们是相等的,所以我需要能够从两个方向访问关系。

如果UserA是UserB的朋友,我想调用user.getFriends()并获取每个用户的朋友列表。UserA将返回UserB,UserB将返回UserA

这就是我计划如何设置我的表。一个面向用户,另一个面向友谊

代码语言:javascript
复制
CREATE TABLE Users(
user_id numeric(19, 0) NOT NULL,
name varchar(128) NOT NULL
PRIMARY KEY (user_id));

CREATE TABLE Friendship(
friend_id_1 numeric(19, 0) NOT NULL,
friend_id_2 numeric(19, 0) NOT NULL
PRIMARY KEY (friend_id_1, friend_id_2),
CONSTRAINT `FX_FRIEND_1` FOREIGN KEY (`friend_id_1`) REFERENCES `Users` (`user_id`),  
CONSTRAINT `FX_FRIEND_2` FOREIGN KEY (`friend_id_2`) REFERENCES `Users` (`user_id`));

我通过hibernate映射文件来映射它们。所以我的问题是,我如何才能将朋友加入用户,而不关心user_id在哪一列(friend_id_1或friend_id_2)?

EN

回答 1

Stack Overflow用户

发布于 2013-09-25 22:39:48

在正常的数据库结构中,如果您只需要将一个朋友链接到表中的另一个朋友,您只需在表中创建一个新字段,该字段将保存与他为好友的人的ID,这是一种静态方式,他只能与另一个人成为朋友,显然在您的情况下,两个朋友的记录都将在这个新字段中保存另一个人的ID。如果你需要多个朋友,那么你只需创建一个新的表来保存两个朋友的ID,这个新表中的每个新记录都将是两个朋友的新链接,使用此选项,一个人可以与同一个表中的任意多个人成为朋友。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18876141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档