2 qq 29910567 qq_29910567 于 2016.01.23 18:41 提问

Oracle 多对多 关联 好友添加

前两天老师教了多对多,比如员工和项目之间,让我想到了QQ好友关系的建立,但在其中遇到了问题。

图片说明
如图所示是我的用户表和关系表和外键关系

图片说明
这是我的实体类,在这里我很纠结,用户自己关联自己,到底是应该建一个实体类还是两个实体类 ,比如 用户类和好友类 其中属性大致相同 两个多对多

图片说明

圆圈圈出的地方我很纠结,还是觉定这么写

图片说明

这是我Test类中的主要内容,大概是新建一个 “我” 然后在我的好友列表里添加 新建的另外一个人

图片说明

这是运行的结果,它在用户列表里更新了两条记录,但在关系表里却没有建立关系。

我在想遇到这种 类似用户好友添加的多对多关系该怎么解决

2个回答

PingZhi_6766
PingZhi_6766   2016.01.24 14:03
已采纳

你好,这种情况使用hibernate多对多来做的话不好配置且并不是很通用,因为它是单表的自身多对多,并不像普通的那种 学生表 和 科目表那样的
多对多。这时候你可以建立一个一对多的关系,建立一个用户表,一个好友表,用户对应一方,好友对应多的一方,好友表对应的Entity通过联合主键
完成。图片说明,对应的主键是图片说明图片说明,这些是Friends
的POJO和hbm.xml配置,用户表只需要userId、userName,userText等属性,不需要在关联其他的属性了,就是单纯的单表的操作,当你添加用户的
时候就是往user表里面插入数据,添加好友的时候,测试时候可以自己new 一个Friends对象来插入数据了,如果要查询某个用户的所有好友的话则这样
select f.id.users_1 from Firends f where f.id.users.userid=?_ 的HQL语句来查询。
这样的话在查询某个用户的时候查询语句就不会闲的很臃肿,因为User表对应的POJO实现类和别的实体并无交集。如果你用过Mybatis的话,你就会
觉得这些关系映射的都让人想死的心都有,同理你的这种需求在Mybatis中很容易就可以实现,因为Mybatis里面你可以自己写Sql语句和结果集,
很方便。希望我的想法能给你一些帮助

devmiao
devmiao   Ds   Rxr 2016.01.23 23:20
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!