1. Hibernate的关联映射
1.1 目标与任务
1.1.1 目标
掌握一对多的关联
掌握多对对的关联
1.1.2 任务
完成具有关联关系的多张表的CRUD
1.1.3 常见的对象之间的关系
关联、继承(泛化)、依赖、组合、聚合、实现
1. 为什么要学习关系映射?
优点:它是Hibernate O/R Mapping的一部分;它是面向对象编程,带来一些方便。
缺点:性能下降;复杂的映射比较麻烦。
2. 类与类之间的关系类型:
a) 关联:A类作为B类的一个属性。例如:人与汽车。
一对一、一对多、多对一、多对多。
b) 泛化:A类继承B类。
c) 依赖:A类作为B类方法的参数。
d) 聚合:A类作为B类的一个属性,但是,从含义上,A类是B类一个组成部分。例如:电脑与鼠标
e) 组合:是一种强聚合关系.A类作为B类的一个属性,在B类的构造方法中,会创建A类的对象。但是,从含义上,A类是B类一个组成部分。部分离开整体后,就没有存在的含义。例如:人和头。
f) 实现:接口和实现类。
类与类之间除了关系的类型外,还有数量关系:
一对一、一对多、多对一、多对多。
3. 常用的关系类型:
关联关系
4. 关联关系映射
1) 一对一:
a) 主键关联:
b) 唯一外键关联:
2) 一对多/多对一
3) 多对多:
2、 主键生成策略
Assigned:赋值,由程序给主键赋值。
Increment:自动增长,由hibernate自动增长。Max(id)+1
Identity:标示列,由数据库自己实现主键自动增长。支持的数据库有DB2、MySQL、MS SQL server、Sybase等。
Sequence:序列,由数据库的序列列实现主键自动增长。支持的数据库有DB2、Oracle、SAP DB等。
Native:本地的,根据数据库的类型,选择identity、sequence、hilo之中的一种。
二、 序列化(java.io.Serializable)
序列化:将Java对象的状态(属性的值),写入特定的存储介质,而进行的编码成二进制流的过程。
反序列化:将存储在特定存储介质上的Java对象的状态,读取出来,并解码成Java对象(unicode编码)的过程。
什么时候实体需要实现序列化接口:这个实体类的对象需要写入硬盘或者在网络传输的时候。
三、 Hibernate中实体对象的状态
临时状态(Transient):刚用new语句创建,没有持久化,并且不在Session的缓存中。
持久化状态(persistent):这个对象已经被持久化,且被加入到Session的缓存当中。
游离/脱管状态(detached):该对象已经被持久化,但是不处于Session的缓存中。
1.2 关联关系
1.2.1 多对一关联
在多方类中,添加一个引用一方的属性。
public class Jd implements Serializable{ private Integer jdid; private String jdname;
private Qx qx;//关联区县类 。。。。。。 |
在多方的映射文件中,添加一个<many-to-one>。
<many-to-one name="qx" class="com.jisong.hibernate.entity.Qx" lazy="false"> <column name="qxid"></column> </many-to-one> |
1.2.2 一对多关联
在一方的类文件中,添加一个Set集合属性。
public class Qx implements Serializable{ private Integer qxid; private String qxname;
private Set jds=new HashSet();//关联到街道类 |
在一方的映射文件中,添加一个<Set><key>…<one-to-many>…</Set>
<set name="jds" lazy="false"> <key column="qxid"></key> <one-to-many class="com.jisong.hibernate.entity.Jd"/> </set> |
1.2.3 一对一关联
1.2.4 多对多关联
在一方的类文件中,添加一个Set集合属性。
public class Qx implements Serializable{ private Integer qxid; private String qxname;
private Set jds=new HashSet();//关联到街道类 |
在一方的映射文件中,添加一个<Set><key>…<one-to-many>…</Set>
<set name="jds" lazy="false"> <key column="qxid"></key> <one-to-many class="com.jisong.hibernate.entity.Jd"/> </set> |
1.3 关联关系