码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate的关联映射

时间:2016-01-12 06:34:09      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

 

 Hibernate可以以面向对象的方式进行数据库访问,既然是面向对象,我们知道在客观世界中,对象不会孤立的存在,在Hibernate中,Hibernate把这种对象与对象之间的联系称为关联关系,如果在我们设计实体类的时候,可以良好的映射这些关联关系,便可以大大简化持久层数据的访问

  关联关系分为两类:

    单向关系:假如学生,老师这个例子,单向关系就是指只能从老师可以访问学生,或者只能从学生访问老师

     双向关系:还是上面的例子,双向关系是指 能从老师访问学生,能从学生访问老师

 

 单向关系中具体的还有:                   双向关系中具体的有:

    1 -> 1               1 <-> 1

    1 -> N                1 <-> N

    N -> N              N <-> N

    N -> 1

 


(一) 【单向】N -> 1

  常见的多对一关系,是父子关系。父类不能访问子类,而其子类s都可以访问父类,在生活中,例子就是:我所住的这一栋楼对应着一个大庆路XX号地址。我们可以从这栋楼中任意一个用户来寻找到这个具体地址,而告诉你一个地址,你却不知道有哪用户。

  Hibernate为了支持这种关系映射,程序应该N持久化类一端增加一个属性,该属性引用1持久类一段。

  • 无连接表的 N -> 1关联

配置关联关系的两种方式:

 1。使用注解(未完成)

  对于N -> 1关联,不论是单向关联,还是多向关联,都需要在N的一端使用@ManyToOne修饰代表关联实体的属性

  具体的以后补充..

 2。使用*.hbm.xml(重点)

  N的一端的配置文件

技术分享
    <class name="domain.Person" table="PERSON">
        <id name="id">
            <column name="ID"></column>
            <generator class="increment"></generator>
        </id>
        <property name="name">
            <column name="NAME"></column>
        </property>
        <many-to-one name="address" column="ADDRESS_ID" class="domain.Address" cascade="save-update"></many-to-one>
    </class>
View Code

 

  • 有连接表的N -> 1关联

配置关联关系的方式:

1。使用注解

 

(二) 【单向】1 -> 1关联

  • 无连接表的关联

  同单向N -> 1相似,一方可以直接访问另一端

配置关联关系的两种方式:

1。使用*.hbm.xml(重点)

  • 有连接表的关联

配置关联关系的方式:

1。使用注解

 

(三) 【单向】1 -> N关联

  单向1 -> N关联,1的持久化类里需要集合属性

public class Person implements Serializable{
    private Integer id;
    private String name;
    private Set<Address> addresses;
       .....
}

---1 -> N(从一个人身上可以知道了他多个住址,而只找到住址,住址不会告诉你这是谁住的)----

public class Address implements Serializable {
    private Integer id;
    private String place;
        ...
}

 

  • 无连接表的关联(外键表示关联关系)

 

配置关联关系的两种方式:

1。使用*.hbm.xml(重点)

  (1)*.hbm.xml中核心配置

        <set name="addresses" cascade="save-update"  >
            <!-- 外键字段名 -->
            <key column="personId"></key>
            <one-to-many class="domain.Address" />
        </set>

  (2)创建了外键来维护关联关系

从数据库查看Address表的结构:

技术分享

2。使用注解

 

  • 有连接表的关联(第三方表维护关联关系)

配置关联关系的方式:

1。使用*.hbm.xml(重点)

  (1)*.hbm.xml中核心配置

        <set name="addresses" cascade="save-update" table="person_address" >
            <!-- 外键表主键为这两个外键id列的组合 -->
            <key column="personId"></key>
            <!-- unique的目的为防止多对一的出现,确保是单向的一对多 -->
            <many-to-many class="domain.Address" column="adresssId" unique="true" />
        </set>

  (2)创建了第三方表的方式维护关联关系  

在数据库查看第三方表person_address:

技术分享

2。使用注解

 

 

(四) 【双向】1 <-> N关联

  单向1 <-> N关联,1的持久化类里需要集合属性,N的持久化类需要一个1的引用变量

  • 无连接表的关联

配置关联关系的两种方式:

1。使用*.hbm.xml(重点)

  (1.1)对于1的一端*.hbm.xml采用的配置文件

        <!-- 一对多,使用集合 -->
        <set name="addresses" cascade="save-update">
            <key column="personId"></key>
            <one-to-many class="domain.Address"/>
        </set>

  (1.2)对于N的一端*.hbm.xml采用的配置文件

        <many-to-one name="person" class="domain.Person" column="personId" cascade="save-update"></many-to-one>

  (2) 查看两张表的数据库中的结构

  技术分享

  

2。适用注解

  • 有连接表的关联

配置关联关系的方式:

1。使用*.hbm.xml(重点)

  (1.1)对于1的一端*.hbm.xml采用的配置文件

        <set name="addresses" cascade="save-update" table="person_address">
            <key column="personId"></key>
            <many-to-many class="domain.Address" column="addressId"/>
        </set>

 

  (1.2)对于N的一端*.hbm.xml采用的配置文件

        <!-- join元素强制使用连接表 -->
        <join table="person_address">
            <key column="addressId"></key>
            <many-to-one name="person" class="domain.Person" column="personId" cascade="save-update"></many-to-one>
        </join>

 

  (2) 查看两张表的数据库中的结构

  技术分享

2。使用注解

Hibernate的关联映射

标签:

原文地址:http://www.cnblogs.com/xingdongpai/p/5123106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!