关联关系

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指的是创建关联关系的类名

原文地址:https://www.cnblogs.com/wyl123/p/8136007.html