前两天老师教了多对多,比如员工和项目之间,让我想到了QQ好友关系的建立,但在其中遇到了问题。
如图所示是我的用户表和关系表和外键关系
这是我的实体类,在这里我很纠结,用户自己关联自己,到底是应该建一个实体类还是两个实体类 ,比如 用户类和好友类 其中属性大致相同 两个多对多
圆圈圈出的地方我很纠结,还是觉定这么写
这是我Test类中的主要内容,大概是新建一个 “我” 然后在我的好友列表里添加 新建的另外一个人
这是运行的结果,它在用户列表里更新了两条记录,但在关系表里却没有建立关系。
我在想遇到这种 类似用户好友添加的多对多关系该怎么解决
你好,这种情况使用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语句和结果集,
很方便。希望我的想法能给你一些帮助