Hibernate—第二季many-one-many

剧情回顾

一对多

实体关系:一个Department对象对应多个User对象。

首先我们创建实体对象和相应的xml文件。

User对象实体如下:

注意 many-to-one 部分(User实体中有个department属性对应user表中的user_dpt_id这个外键,它来自Department实体)

Department实体对象如下:

注意 set集合

注意 set 部分(Department实体中有一个users集合来自User实体。外键user_dpt_id)

测试代码如下:

如果保存对象过多这样就特别麻烦。这就引出我们另外一个操作级联操作:cascade属性值有三个

save-update: 级联保存更新(一般只用这个)

delete:级联删除(没把握轻易别用,不然你们项目经理会弄死你)

all:save-update+delete

测试代码如下:

理解为:保存dpt时也将dpt中set集合内的所有user也一并保存了。

细心的小伙伴可能发现控制台的输出,怎么会有update出现。那是因为User会维护外键user_dpt_id。而Department也会维护外键user_dpt_id。这样多次访问数据库会增加数据库压力。所以必须有一方放弃维护外键。

一对多关系中:一的一方放弃,也只能一的一方放弃。多的一方不能放弃。(毕竟user_dpt_id是在User表中)

inverse默认为false表示维护外键,修改为true表示放弃维护外键。

多对多

实体关系:多个Department对象对应多个User对象。(一人身兼多职)

首先我们创建实体对象和相应的xml文件。

User对象实体如下:

注意 set部分(User实体中有departments集合来自Department实体。中间表为user_dpt,User提供外键为user_id,Department提供外键为dpt_id。并且使用级联保存更新)

Department实体对象如下:

注意 set部分(Department实体中有users集合来自User实体。中间表为user_dpt,Department提供外键为dpt_id,User提供外键为user_id。没有使用级联保存更新,但放弃维护外键)

测试代码如下:

结论: 将来在开发中,如果遇到多对多关系。一定要选择一方放弃维护关系,一般谁来放弃要看业务方向。

例如录入员工时,需要为员工指定所属角色。业务方向就是由员工维护角色,角色不需要维护与员工关系,角色放弃维护。

更多内容请(⊙o⊙)…

....................END.......................

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180124G02SJW00?refer=cp_1026

扫码关注云+社区