Hibernate框架--Hibernate的关联映射

 

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自动增长。Maxid+1

Identity:标示列,由数据库自己实现主键自动增长。支持的数据库有DB2MySQLMS SQL serverSybase等。

Sequence:序列,由数据库的序列列实现主键自动增长。支持的数据库有DB2OracleSAP DB等。

Native:本地的,根据数据库的类型,选择identitysequencehilo之中的一种。

二、         序列化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     关联关系

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值