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

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();

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值