hibernate 关联映射和级联操作
2018-07-30 本文已影响15人
bigpeng个人博客
1、我们说hibernate 是完全ORM的框架,其对数据库的操作完全面向对象的!表跟表之前的关系有外键关联,或通过中间表关联。那我们该怎么来配置他们的一个关联关系呢?
2、关联映射
关联映射用以来描述表之间的关联关系或者说对象之间的关联关系,一般分为四种
(现假设有两张表 ,A 和 B )
1)一对一 :一个员工,一个详细信息介绍。
2)一对多 :一个部门有多个员工
3)多对一 :多个员工属于同一部门
4)多对多 :一个 员工可以有多个角色,一个角色可以对应多个员工
3、关联映射具体配置
1)一对一配置
2)一对多配置(部门和员工 )
在部门配置文件中加入如下内容:
<!--用户为一对多 设置inverse 为true 外键交由User类来维护
如果不设置默认为false,为false的结果是,删除机构的时候会将用户表中对应的机构ID设为null.
如果设置为true,casecade 设置为delete-orphan的话 则会级联删除
-->
<bag name="users" inverse="true" cascade="delete-orphan" >
<!--user 表中的外键-->
<key column="dept"></key>
<one-to-many class="com.seecen.pojo.HUser"></one-to-many>
</bag>
3)多对一(员工-->部门)
<!--多对一-->
<many-to-one name="hDept" column="DEPT" class="com.seecen.pojo.HDept">
</many-to-one>
4)多对多
<!--多对多 需要设定一个中间表 通过bag标签来配置-->
<bag name="roles" table="h_user_role">
<!--key 为当前类的字段 -->
<key column="USERID"></key>
<many-to-many column="ROLEID" class="com.seecen.pojo.HRole"></many-to-many>
</bag>
4、级联操作
所谓级联操作就是连带一起操作 。(株连)
在对象关联关系的标签上(bag set list )可以通过配置inverse和cascade两个参数来实现级联操作。
1)inverses:配置该对象是否放弃维护关联外键。默认为false,即可以维护。维护的主要是(外键) 。一般外键在哪个表中我们就让哪个表来维护外键 另外一张表inverses 设置为true。这样可以减少update语句的执行。
2)cascade:配置是否级联保存删除更新等操作。其主要的值有
a)none:默认值,表示不开启级联操作
b)save-update:级联保存和更新
c)delete:级联删除