• 关联关系


    1.关联关系中常用属性

    1.1  cascade属性

    关于cascade(级联)属性

    级联的意思是指定两个对象之间的操作联动关系,对一个对象执行了操作之后,对其指定的级联对象也需要执行相同的操作

    总共可以取值为:all、none、save-update、delete

    all-代表在所有的情况下都执行级联操作

    none-在所有情况下都不执行级联操作

    save-update-在保存和更新的时候执行级联操作

    delete-在删除的时候执行级联操作

    Cascade取值:

       None,save-update,delete和all

       none:当Session操纵当前对象时,忽略其他关联的对象。它是cascade属性的默认值.

      Save-update:当通过Session的save()、update()及saveOrUpdate()方法来保存或更新当前对象时,级联保存所有关联的新建的瞬时状态的对象,并且级联更新所有关联的游离状态的对象。

     Delete:当通过Session的delete()方法删除当前对象时,会级联删除所有关联的对象。

    当通过Session的delete()方法删除当前对象时,会级联删除所有关联的对象。

    All:包含save-update,delete的行为。

    注意点:级联也就是说当我们保存持久化对象A的时候自动帮我们保存持久化对象B。

    Eg.测试代码的核心部分

    tx= session.beginTransaction();

    //准备一个Department对象
    Dept dept=new Dept();
    dept.setDeptname("软件部");
    //准备一个Employee对象
    Emp emp=new Emp();
    emp.setEmpname("陈文杰");
    emp.setDept(dept);
    dept.getEmps().add(emp);
    session.save(dept);
    tx.commit();

    关联标记属性

    简单介绍下面几个,除了name是必须,其余都是可选的。更多的我们参考官文档。

    name="对应本类的属性名"

    column="映射到本表的字段名"

    class="映射到本表的实体类"

    unique="ture|false":(数据库外键字段生成一个唯一约束)

    not-null="ture|false"默认false(数据库外键字段是否允许为空值)

    lazy="ture|false"默认proxy(延迟加载)

    1.2 inverse属性

    inverse属性指定了关联关系中的方向。

    inverse设置为false,则为主动方,由主动方负责维护关联关系,默认是false 。

    注意:inverse 决定是否把对对象中集合的改动反映到数据库中,所以inverse只对集合起作用,也就是只对one-to-manymany-to-many有效(因 为只有这两种关联关系包含集合,而one-to-onemany-to-one只含有关系对方的一个引用)。

    Eg.测试代码如下:

    tran = session.beginTransaction();

    //准备一个Department对象

    Department dept=new Department();

    dept.setName("财务部");

    //准备一个Employee对象

    Employee emp=new Employee();

    emp.setName("陈文杰");

    //员工指定自己所属的部分

    emp.setDept(dept);

    dept.getEmployees().add(emp);

    session.save(dept);

    // 事务提交

    tran.commit();

    System.out.println("成功");

    说明:如果我既给员工指定了自己所属的部门,又将员工添加到部门集合中。那么这个时候reverse不设置,生成以下sql

    inverse设置为true,不负责维护关联关系

    一对多类图举例:

    映射文件

    dept.hbm.xml中做映射:

    加一个集合set标签,name指的是在Dept中植入的set集合起的名字,column指的是多的一方表的外键列,class指的是创建关联关系的类名

  • 相关阅读:
    模块三 GO语言实战与应用-条件变量sync.Cond(上)
    模块三 GO语言实战与应用-sync.Mutex与sync.RWMutex
    模块三 GO语言实战与应用-更多的测试手法
    模块三 GO语言实战与应用-测试的基本规则和流程(下)
    模块三 GO语言实战与应用-测试的基本规则和流程(上)
    模块二 GO语言进阶技术-PANIC函数、RECOVER函数以及DEFER语句(下)
    CentOS7 相关命令-sunziren
    Thymeleaf如何回填复选框?-sunziren
    Thymeleaf中如何判断字符串是否包含或者不包含某个子串?-sunziren
    MySQL Innodb Engine--修改数据时先写Buffer Pool还是先写Redo Log
  • 原文地址:https://www.cnblogs.com/wyl123/p/8136007.html
Copyright © 2020-2023  润新知