hibernate一对多配置
在一方javabean中添加一个Set集合,集合泛型为多方,将集合初始化(new),生成对应的get和set方法,在javabean映射中配置:
<set name="集合名称">
<key column="多方javabean的外键名称"/>
<one-to-many class="多方javabean路径"/>
</set>
<set>标签
name属性:表示当前javabean的存储多方数据集合的名称
cascade属性: 级联保存,保存客户数据 级联是联系人数据,在客户这里配置(在开发中一般不会在主表对象关联 而是inverse放弃)
inverse属性: 默认值为false,当值为true时放弃维护(为了防止sql重复,提高效率,会放弃一方的维护)
<key>标签
column属性:外键名称
<one-to-many>标签:
<class>属性:多方javabean的路径
javabean
![![一方javabean][1]](https://i-blog.csdnimg.cn/blog_migrate/1c3a4e5a0fc8067114aed6acd9327c7e.png)
映射文件
![![一方映射文件][2]](https://i-blog.csdnimg.cn/blog_migrate/77e9b486a2fdcfdf2064c649c8451724.png)
多方配置:
在javabean中添加一个属性,类型为一方javabean,不能自己初始化(hibernate会自动完成初始化),生成get和set方法,以及外键
在多方映射文件中的配置:
在配置javabean的属性映射数据表字段时,不能配置外键映射字段,需要将外键和对象绑定(一方javabean对象)
<many-to-one name="多方属性中的一方对象" class="一方javabean路径" column="外键名称" cascade="级联"/>
<many-to-one>标签
name属性: 在多方javabean中添加的一方javabean对象名称
class属性: 一方javabean路径
column属性: 外键名称
cascade属性: 级联
取值有:
save-update :级联保存和更新
delete : 级联删除
delete-orphan :移除删除,先将外键值赋值为null,再删除
多方javabean
![![多方javabean][3]](https://i-blog.csdnimg.cn/blog_migrate/48e92532c968fa5b4cca0cac6bfc3443.png)
多方映射配置
![![多方映射配置][4]](https://i-blog.csdnimg.cn/blog_migrate/69fb5685be842600e2d61ea29c2c5c39.png)
## hibernate多对多配置 ##
只需要配置两个多方,中间表由hibernate框架生成,操作多方集合就相当于操作中间表
在两个多方的javabean中添加一个外键,和一个集合,集合初始化,生成get和set方法
演示:
![![javabean一][5]](https://i-blog.csdnimg.cn/blog_migrate/aadb3ceaefbf8366375e3b149792826c.png)
![![javabean二][6]](https://i-blog.csdnimg.cn/blog_migrate/178bebd25ba3adceadf1e3530be77753.png)
映射文件:
配置多对多必须有一方放弃维护(inverse),另一方需要级联(cascade)
放弃一方:
<set name="集合存储的javabean全路径" table="数据表" inverse="true" cascade="save-update">
<key column="外键名称"></key>
<many-to-many class="外键对应的javabean路径" column="对应的javabean在中间表的外键"/>
</set>
![![映射文件一][7]](https://i-blog.csdnimg.cn/blog_migrate/4502073a7d9e59a33e0bc3acfcbef8b2.png)
![![映射文件二][8]](https://i-blog.csdnimg.cn/blog_migrate/cc6a13b4e5a7e6483a85b0a113be69db.png)