SSH框架之Hibernate的inverse属性、cascade级联操作

一、inverse属性
1、Inverse属性,是在维护关联关系的时候起作用的。
表示控制权是否转移。(只在一的一方起作用(本例中为Dept),多的一方无法使用)

<!--
    Dept.hbm.xml
    inverse=false set集合映射的默认值,表示有控制权
-->
    <set name="emps" inverse="false">
        <key column="dept_id"></key>
        <one-to-many class="Employee"/>
    </set> 

2、Inverse中文意思:控制反转。
1)Inverse = false 不反转;当前方有控制权
2)Inverse = true 控制反转; 当前方没有控制权

3、维护关联关系中,是否设置inverse属性:
1)对保存数据有无影响?
有影响:如果设置控制反转,即inverse=true, 然后通过部门方维护关联关系。在保存部门的时候,同时保存员工, 数据会保存,但关联关系不会维护。即外键字段为NULL。

2)对获取数据有无影响?
无影响。

3)对解除关联关系有无影响?
有影响。
inverse=false, 可以解除关联。

inverse=true, 当前方(部门)没有控制权,不能解除关联关系。
(不会生成update语句,也不会报错)

4)删除数据对关联关系有无影响?
有影响。
inverse=false, 有控制权, 可以删除。先清空外键引用,再删除数据。
inverse=true, 没有控制权: 如果删除的记录有被外键引用,会报错,违反主外键引用约束! 如果删除的记录没有被引用,可以直接删除。

二、cascade级联操作
1、取值
1)ascade 表示级联操作 【可以设置到一的一方或多的一方】
2)none 不级联操作, 默认值
3)save-update 级联保存或更新
4)delete 级联删除
5)save-update,delete 级联保存、更新、删除
6)all 同5)。级联保存、更新、删除

2、举例:
1)Dept.hbm.xml

    <set name="emps" cascade="save-update">
        <key column="dept_id"></key>
        <one-to-many class="Employee"/>
    </set> 

2)测试类:App4_cascade.java

package sram.oneToMany;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class App4_cascade {
    public static SessionFactory sf;
    static{
        sf = new Configuration()
            .configure()
            .addClass(Dept.class)
            .addClass(Employee.class)//测试使用

a)级联保存:

b)级联删除:

//2.级联删除
    @Test
    public void delete(){
        Session session = sf.openSession();
        session.beginTransaction();

        Dept dept = (Dept) session.get(Dept.class, 1);
        session.delete(dept);//级联删除,使用的很少,
                             //一般都通过自己书写程序控制,而不是配置做到级联删除。

        session.getTransaction().commit();
        session.close();
    }

三、hibernate常见面试题: inverse与cascade区别?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值