1

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

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

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

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

这就是我计划设置我的桌子的方式。一份给用户,一份给友谊

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`));

我通过休眠映射文件映射这些。所以我的问题是如何将朋友加入用户而不关心 user_id 在哪一列(friend_id_1 或friend_id_2)?

4

1 回答 1

0

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

于 2013-09-25T14:39:47.693 回答