视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
hibernate的配置文件工作原理和两种设计:一对多、多对多
2020-11-09 08:42:18 责编:小采
文档


"一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系。一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多。多对一:从订单的角度来说多个订单可以对应一个消费者,即为多对一。个人简单的一点小结 。

一对多

实体类

一: private Set<LinkMan> linkMans; // 表达一对多关系
多: private Customer customer ; //表达多对一关系

配置文件

一:

 <!-- 集合,一对多关系,在配置文件中配置 -->
 <!-- 
 name属性: 集合属性名
 column属性: 外键列名
 class属性: 与我关联的对象完整类名
 -->
 <!-- 
 级联操作: cascade属性
 save-update: 级联保存更新
 delete: 级联删除
 all: save-update+delete
 级联操作: 简化操作.目的就是为了少些两行代码.
 -->
 <!-- inverse属性: 配置关系是否维护. 
 true: customer不维护关系
 false(默认值): customer维护关系
 inverse属性: 性能优化.提高关系维护的性能.
 原则: 无论怎么放弃,总有一方必须要维护关系.
 一对多关系中: 一的一方放弃.也只能一的一方放弃.多的一方不能放弃.
 -->
 <set name="linkMens" inverse="true" cascade="delete">
 <key column="lkm_cust_id" ></key>
 <one-to-many class="LinkMan" />
 </set>

多:

 <!-- 多对一 -->
 <!-- 
 name属性: 引用属性名
 column属性: 外键列名
 class属性: 与我关联的对象完整类名
 -->
 <!-- 
 级联操作: cascade属性
 save-update: 级联保存更新
 delete: 级联删除
 all: save-update+delete
 级联操作: 简化操作.目的就是为了少些两行代码.
 -->
 <!-- 多的一方: 不能放弃维护关系的.外键字段就在多的一方. -->
 <many-to-one name="customer" column="lkm_cust_id" class="Customer"></many-to-one>

多对多

实体类

多:private Set<User> users; // 表达多对多关系
多:private Set<Role> roles; // 表达多对多关系

配置文件
多:

 <!-- 多对多关系表达 -->
 <!-- 
 name: 集合属性名
 table: 配置中间表名
 key
 column: 外键,别人引用"我"的外键列名
 many-to-many
 class: 我与哪个类是多对多关系
 column: 外键.我引用别人的外键列名
 -->
 <!-- 使用inverse属性
 true: 放弃维护外键关系
 false(默认值):维护关系
 
 结论: 将来在开发中,如果遇到多对多关系.一定要选择一方放弃维护关系.
 一般谁来放弃要看业务方向. 例如录入员工时,需要为员工指定所属角色.
 那么业务方向就是由员工维护角色. 角色不需要维护与员工关系.角色放弃维护
 --> 
 <set name="users" table="sys_user_role" inverse="true" >
 <key column="role_id" ></key>
 <many-to-many class="User" column="user_id" ></many-to-many>
 </set>

多:

 <!-- 多对多关系表达 -->
 <!-- 
 name: 集合属性名
 table: 配置中间表名
 key
 column: 外键,别人引用"我"的外键列名
 many-to-many
 class: 我与哪个类是多对多关系
 column: 外键.我引用别人的外键列名
 -->
 <!-- cascade级联操作:
 save-update: 级联保存更新
 delete: 级联删除
 all: 级联保存更新+级联删除
 结论: cascade简化代码书写.该属性使不使用无所谓. 建议要用只用save-update.
 如果使用delete操作太过危险.尤其在多对多中.不建议使用.
 -->
 <set name="roles" table="sys_user_role" cascade="save-update" >
 <key column="user_id" ></key>
 <many-to-many class="Role" column="role_id" ></many-to-many>
 </set>

下载本文
显示全文
专题