Hibernate一对多和多不多的操作

来源:互联网 发布:淘宝卖家活动报名 编辑:程序博客网 时间:2024/06/05 16:17

1、hibernate删除前为什么一定要查询

(1)查出来是要看看有没有关联的对象,为级联删除做准备。

(2)机制如此,删除方法中放的是实体类。

2、一对多时的级联和外键的维护

 (1) 外键维护  inverse属性:是否放弃维护关联关系
                 true: 放弃维护
                 false(默认值):维护关系


    <set name="linkMen" inverse="true"  >
            <key column="lkm_cust_id"  ></key>
            <one-to-many class="LinkMan" />
        </set>

一对多时,只能是一的一方放弃外键的维护权

一个是多的多方没有inverse 这个属性,

如果让一的一方维护外键的关系,会造成生成多2条update语句

因为外键就在多的一方,所以让多的一方维护外键不会造成多生成sql语句的情况

 

(2)级联操作
                cascade属性:
                    save-update: 级联保存或更新
                    delete:    级联删除
                    all: 级联保存或更新+级联删除


级联删除不建议用,

级联保存省了一部分代码,不一定要用级联保存


多对多表的级联和外键的维护,每一方级联和外键维护都可以

但是注意的一点外键维护时,以主的一方进行外键维护。


映射文件的配置

一对多的映射文件的配置

单表的一方

<!-- 一对多
            name属性: 表达一对多关系集合的名称
            column属性: 表达一对多关系的外键列名
            class属性:描述"我"与谁是一对多关系
        -->
        <!-- 级联操作
                cascade属性:
                    save-update: 级联保存或更新
                    delete:    级联删除
                    all: 级联保存或更新+级联删除
         -->
         <!-- inverse属性:是否放弃维护关联关系
                 true: 放弃维护
                 false(默认值):维护关系
          -->
        <set name="linkMen" inverse="true"  cascade="save-update">
            <key column="lkm_cust_id"  ></key>
            <one-to-many class="LinkMan" />
        </set>

多表的一方

<!-- 多对一关系映射
            name属性: 表达多对一关系的属性名
            column属性: 表中表达关系的外键列名
            class属性:
         -->
         <!-- 级联操作
                cascade属性:
                    save-update: 级联保存或更新
                    delete:    级联删除
                    all: 级联保存或更新+级联删除
         -->
        <many-to-one name="customer"  
             column="lkm_cust_id"
             class="Customer" />


多对多

<!-- 多对多
            name属性: 表达一对多关系集合的名称
            table属性:中间表表名
            key => column属性: 表达多对多关系的外键列名.映射文件所在对象外键
            class属性:描述"我"与谁是一对多关系
            many-to-many => column属性: 表达多对多关系的外键列名,对方对象外键
        -->
        <!-- inverse属性:是否放弃维护关联关系
                 true: 放弃维护
                 false(默认值):维护关系
          -->
          <!-- 级联操作
                cascade属性:
                    save-update: 级联保存或更新
                    delete:    级联删除
                    all: 级联保存或更新+级联删除
         -->
        <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属性: 表达多对多关系的外键列名.映射文件所在对象外键
            class属性:描述"我"与谁是一对多关系
            many-to-many => column属性: 表达多对多关系的外键列名,对方对象外键
        -->
        <!-- inverse属性:是否放弃维护关联关系
                 true: 放弃维护
                 false(默认值):维护关系
          -->
          <!-- 级联操作
                cascade属性:
                    save-update: 级联保存或更新
                    delete:    级联删除
                    all: 级联保存或更新+级联删除
         -->
        <set name="roles" table="sys_user_role"   >
            <key column="user_id"  ></key>
            <many-to-many class="Role" column="role_id" ></many-to-many>
        </set>





原创粉丝点击