您的位置:首页 > 其它

Hibernate数据关联映射之一对多和多对一配置

2017-05-19 00:12 381 查看

Hibernate数据关联映射

1.一对多关系配置

以Emp(员工)表和Dept(部门)表为例,一个部门中有多个员工(一对多映射),多个员工可以同属于一个部门(多对一),一对多和多对一中,可以只配置其中一方。

在一对多中,需要在Dept类中添加Emp类所属的员工信息,首先定义实体类,此处省略set和get方法,Hibernate必须给实体类提供不带参数的构造方法,所以可不生成构造方法

以下省略Hibernate.cfg.xml配置

public class Dept implements Serializable{
private Integer id;
private String dname;
private String loc;
private Set<Emp>emps=new HashSet<Emp>();


在Dept.hbm.xml配置文档中配置属性映射,set-name指定实体类的属性,此处必须是是一个set集合;

inverse=”true” 权利反转,将维护关系的权利交由另一方;

cascade=”all” 级联操作,对管理中的对象进行操作,其关联的对象也会受到影响,此处表示关联所有对象

<class name="Dept" table="DEPT">
<id name="id">
<generator class="sequence"/>
</id>
<property name="dname"/>
<property name="loc"/>
<set name="emps" cascade="all">
<key column="did"/>
<ont-to-many class="Emp"/>
</set>
</class>


编写测试类,添加信息员工及部门信息,因为在xml中配置了inverse级联操作,所以只需save(dept)可以了

//设置类与类之间的关系
//创建部门
Dept dept=new Dept();
dept.setDname("就业部");
dept.setLoc("百脑汇18楼");
//创建员工
Emp emp1=new Emp();
emp1.setEname("张三");
emp1.setGender("男");
Emp emp2=new Emp();
emp2.setEname("李四");
emp2.setGender("男");
//将员工添加到部门当中
Set<Emp> emps=new HashSet<Emp>();
emps.add(emp1);
emps.add(emp2);
dept.setEmps(emps);
//保存数据
session.save(dept);


2.多对一关系配置

创建emp实体类,并添加Dept对象

public class Emp implements Serializable{

private Integer id;
private String ename;
private String gender;
private Dept dept;


在emp.hbm.xml中配置多对一关系

<class name="Emp" table="EMP">
<id name="id">
<!-- Mysql 配置主键生成策略 -->
<generator class="native"/>
</id>
<property name="ename"/>
<property name="gender"/>
<!-- 配置多对一 -->
<many-to-one name="dept" class="Dept" column="did" />
</class>


编写测试类,打印emp信息及其所属的Dept信息

Emp emp = (Emp) session.get(Emp.class, 1);
//打印dept当中的信息
System.out.println(emp.getId()+","+emp.getEname()+","+emp.getGender());
Dept dept = emp.getDept();
System.out.println(dept.getId()+","+dept.getDname()+","+dept.getLoc());
session.close();


至此一对多和多对一数据关联映射配置完毕。

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate