剧情回顾
一对多
实体关系:一个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.......................
领取专属 10元无门槛券
私享最新 技术干货