`

Hibernate 关联关系 总结

阅读更多

1.一对多的单向关联关系

      配置单向的一对多关系是从"一"这一方开始的.通过one-to-many来实现.由于在一对多的关系中,需要在一方持有多方的对象,因此需通过set或 bag来实现.

如:一个教师可拥有多名学生:

教师配置文件如下:

   <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="hibernate.ch08.Teacher" table="teacher" lazy="false">
     <id name="id" type="integer">
     <column name="id"></column>
     <generator class="identity"></generator>
     </id>
     <property name="teacherName" type="string"></property>
     <set name="students"  fetch="select" cascade="save-update" lazy="false">
     <key column="teacher_id"></key>
     <one-to-many class="hibernate.ch08.Student"/>
     <!-- inverse="true" 此属性用来更新速度,表示在执行主表teacher的更新时不更新从表student的值,如果改为false或去掉,就会更新.
        这就是我们常见的student表中teacher_id值为空的情况
       -->
     </set>
  </class>
</hibernate-mapping>

 

学生配置如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
  <class name="hibernate.ch08.Student" table="student" lazy="false">
    <id name="id" type="integer">
    <column name="id"></column>
    <generator class="identity"></generator>
    </id>
     <property name="studentName" type="string"></property>
    </class>
</hibernate-mapping>

虽然这种单向操作可以满足日常需要,但也存在问题,在保存被控对象时,需要先插入空值到被关联的字段中,(如果数据库建立非空约束,将会导致失败),然后再进行更新操作.这样将一个操作分两步,降低效率.

 

2.多对一关联

      多对一是一对多的反向,在实际中为了避免只配置一对多的关联关系时所遇到的问题.通常会将一对多的关联配置为双向的.同时将关联关系的主控方设置为"多"的一方.这样就可避免上述问题.

对于多对一的关联需要在多的一方配置many-to-one

<many-to-one mane="user" class="User" column="user_id"/>

另外为了使多的一方为主控方,需要在一的一方设置inverse="true"的配置(set里设置)

 

 

 

3.多对多关联

     多对多关联需要借助于中间表来实现.通过中间表,将这两个表之间的多对多的关联关系转换成它们分别与中间表的一对多关联关系.那么对于Hibernate不需要中间对象来实现这种转换,但是中间表还是需要建立的.

 

     多对多的关系是通过many-to-many进行配置的,同样是由于在一方需要持有另一方对象的集合,所以集合对象是不可少的.

<set name="roles"

       cascade="save-update"

      inverse="false"

      table="user_role">

 <many-to-many class="Role" column="role_id"/>

</set>

 

<set name="rsers"

       cascade="save-update"

      inverse="true"

      table="user_role">

 <many-to-many class="User" column="user_id"/>

</set>

分享到:
评论

相关推荐

    Hibernate关联关系总结

    Hibernate关联关系总结 一对多 多对一 多对多

    hibernate关联关系总结

    详细讲解hibernate的关联关系,以及用实例讲解,非常详细

    HIbernate关联关系总结

    大致总结了一下Hibernate关联关系。提供相关的一些例子进行测试。

    Hibernate关联映射总结

    关于对Hibernate关联映射的一个总结,其中有各种映射的例子,详细用法 等

    hibernate映射关系总结

    hibernate开发的关系: one-to-one,many-to-one,many-to-many学习经验总结

    Hibernate映射关联关系总结

    对Hibernate映射关系详细总结,可以帮助你学习Hibernate知识

    Hibernate_实体关联关系映射--学习总结

    Hibernate 实体关联关系映射 学习总结 把一对一 一对多 单向 双向 主键 外键 链接表等讲的比较清楚

    hibernate实体关联关系映射

    Hibernate实体关联关系映射--学习总结,让同仁们更好的学习Hiebernate

    Hibernate实体关联关系映射--学习总结.pdf

    Hibernate实体关联关系映射--学习总结.pdf

    hibernate中的关联关系

    主要是hibernate中的几种关系,我是通过一个博客中的东西,自己整理成了pdf文档,供大家参考。

    Hibernate 一对一关联查询.docx

    1、在有外键的一方,可以维护关联关系,可以建立关联关系,同样也可以解除关联关系,可以任意删除本对象,如果在hbm.xml中设置了cascade="delete",也可以删除关联对象 2、在没有外键的一方,不可以维护关联关系,...

    传智播客李勇hibernate源码1-20课

    传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|... 20_一对一外键关联关系的映射与原理分析

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

    Hibernate+中文文档

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

    实体类对应关系处理hibernate

    自己根据课本总结的使用hibernate时,实体类间映射文件即*.hbm.xml文件的写法。如果你正在学习hibernate,保证会对你有所帮助。

    Hibernate学习总结

    学习成长路,Hibernate总结: 1.Hibernate入门优缺点、 ...5.映射一对多关联关系、 6.深入session、 7.懒加载、 8.Hibernate检索策略(fetch抓取策略)、 9.二级缓存、 10.Hbernate的检索方式(HQL语句)

    hibernate3.2中文文档(chm格式)

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

    HibernateAPI中文版.chm

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

    Hibernate中文详细学习文档

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

Global site tag (gtag.js) - Google Analytics