美文网首页
hibernate 关联映射和级联操作

hibernate 关联映射和级联操作

作者: bigpeng个人博客 | 来源:发表于2018-07-30 16:23 被阅读15次

    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:级联删除

    相关文章

      网友评论

          本文标题:hibernate 关联映射和级联操作

          本文链接:https://www.haomeiwen.com/subject/eqzomftx.html