一、Hibernate关联关系
1 . 实体之间的关系
- 泛化关系
通过对象之间的继承来实现 - 关联关系
通过一个对象持有另一个对象的实现来实现
类与类之间最常见的关系就是关联关系
2 . 关联关系
- 一对多
- 多对一
- 多对多
- 一对一
二、多对一关系
1.数据库表
drop table if exists t_emp;
drop table if exists t_dept;
create table t_dept(
id int primary key auto_increment,
name varchar(200)
)engine=Innodb default charset=utf-8;
create table t_emp(
id int primary key auto_increment,
name varchar(200),
dept_id int,
foreign key(dept_id) references t_dept(id)
)engine=Innodb default charset=utf-8;
#插入数据
insert into t_emp(name) values('d1'),('d2'),('d3');
insert into t_dept(name,dept_id) values('e1',1);
insert into t_dept(name,dept_id) values('e2',2);
insert into t_dept(name,dept_id) values('e3',3);
insert into t_dept(name,dept_id) values('e4',1);
insert into t_dept(name,dept_id) values('e5',1);
insert into t_dept(name,dept_id) values('e6',1);
insert into t_dept(name,dept_id) values('e7',2);
多对一关系:多个员工可以在同一个部门
多方----------->员工
一方----------->部门
2 . 配置方式
定义员工实体类
public Class Emp implements Serializable(
private Integer id;
private String name;
private Dept dept; //在多方定义一方的引用
//省略get\set方法
定义部门实体类
public Class Dept implements Serializable(
private Integer id;
private String name;
//省略get\set方法
编写Emp.hbm.xml映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- hibernate映射文件、通过映射文件说明实体类和数据表的关联关系 -->
<hibernate-mapping package="cn.com.pojo">
<!-- 类和表的映射 -->
<class name="Emp" table="t_emp">
<!-- 表中列和类中属性的映射 -->
<!-- 主键 -->
<id name="id" column="id">
<!-- 指定主键生成策略、native是自增主键 -->
<generator class="native"></generator>
</id>
<!-- 普通字段 -->
<property name="name" column="name" type="java.lang.string"></property>
<!--
配置多对一的关系
name : 属性名
column : 列名、外检列
class : 属性的类型
-->
<!--
lazy :数据加载策略,可取值如下
false :立即加载关联数据,查询两次
proxy :懒加载,以代理对象的方式进行加载,默认值
no-proxy :懒加载,该方式在编译时需要进行字节码的增强,一般不怎么使用
-->
<many-to-one name="dept" column="dept_id" class="Dept" lazy="false"></many-to-one>
</class>
</hibernate-mapping>
编写Dept.hbm.xml映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- hibernate映射文件、通过映射文件说明实体类和数据表的关联关系 -->
<hibernate-mapping package="cn.com.pojo">
<!-- 类和表的映射 -->
<class name="Dept" table="t_dept">
<!-- 表中列和类中属性的映射 -->
<!-- 主键 -->
<id name="id" column="id">
<!-- 指定主键生成策略、native是自增主键 -->
<generator class="native"></generator>
</id>
<!-- 普通字段 -->
<property name="name" column="name" type="java.lang.string"></prop