`

Hibernate各种映射的小结

阅读更多

Hibernate各种映射的小结

个人定义:

1.many方:持有foreign key 字段的一方

2.单向:关联双方在Object表现形式时,持有另一方的情况,一般Many方持有另一方的对象

   双向:关联双方相互持有对方对象

3.many-to-one: 对应于数据库表格中的foreign key

一、一对一外键映射

1.数据库中表的情况

一个表的外键关联另一个表的主键

2.映射表中的配置

单向:

Many方持有的对象配置many-to-one,设定unique="true"

如 

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.linys.model.Husband" table="husband">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        
        <property name="name" type="java.lang.String">
            <column name="name" length="50" not-null="true" />
        </property>
        <!-- 关联信息 -->
        <!-- 
        name: 该Object类(Husband)关联的对象属性 
        class:关联的对象的类
        unique:值为true时表一对一外键关联
        column:在关联表中关联字段
         -->
        <many-to-one name="wife" class="com.linys.model.Wife" unique="true">
            <column name="wifeid" />
        </many-to-one>
    </class>
</hibernate-mapping>
 

 

双向:

1)Many方持有的对象配置同单向

2)为One方持有的对象配置one-to-one,指定cascade=true,inverse=true

如 

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.linys.model.Wife" table="wife">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="50" not-null="true" />
        </property>
        <!-- 关联信息 -->
        
        <!-- 
        name: 在Wife中关联的对象名
        class: 关联的对象类
        property-ref :在关联的对象类中该类的关联属性名
        cascade:设置是否级联
         -->
        <one-to-one name="husband" class="com.linys.model.Husband" 
         property-ref="wife" cascade="all" inverse="true"/>
    </class>
</hibernate-mapping>
 

 

3.对象存储的操作

同时存储两个对象时,顺序不一样,插入语句不一样,但多不会报错

存一个对象时,如果是单向时,如果存many方会出错,因为many方有外键,如果是one方,不会出错,但只会存one对象;如果是双向时,如果存many方会出错,因为many方有外键,如果是one方,不会出错,会存储双方,因为one方是cascade方,主控方

 

二、一对一主键映射

1.数据库中表的情况

一个表的主键依赖与另一个表的主键生成,即一个表的主键又是外键关联到另一个表的主键

2.映射表中的配置

单向:

Many方1)配置id:生成器generator为foreign,并指定Object类的关联属性

2)配置one-to-one 配置关联属性,必须加constrained为true

如:

 

 <id name="id" type="java.lang.Integer" column="id">
        <!-- 基于主键关联时,主键生成策略是foreign,表明根据关联类生成主键 -->
            <generator class="foreign">
            <!--关联持久化类的属性名-->
            	<param name="property">husband</param>
            </generator>
        </id>
 <!--用于映射1-1关联-->
        <one-to-one name="husband" constrained="true"/>
 

双向:

1)Many方同单向

 

2)为One方持有的对象配置one-to-one,指定cascade

<one-to-one name="wife" property-ref="husband" cascade="all"/>

3.对象存储的操作

同时存储两个对象时,顺序不一样,插入语句不一样,但多不会报错

存一个对象时,如果是单向时,如果存many方会插入双方,因为many方有外键,需先插入one方获得主键后才能插入,如果是one方,不会出错,但只会存one对象;如果是双向时,如果存many方或one方,都不会出错,会存储双方,因为one方是cascade方,是主控方

 

 

三、多对一和一对多,以及二者一起用时构成双向

1.数据库中表的情况

一张表的外键关联另一张表的主键

2.Object类中的差别

多对一,many方持有one方的对象

一对多,one方持有many方的Set对象集合

3.映射表中的配置

多对一:

Many方1)配置many-to-one 配置关联属性

如:

<many-to-one name="group" class="Group">
            <column name="groupid" not-null="true" />
        </many-to-one>

 一对多

 

1)为One方持有的对象配置 

 

<!-- set 指定Object类中的属性 -->
        <set name="users" >
          <!-- 指定在关联表中的外键字段 -->
          <key column="groupId" />
          <!--set中包含的对象 -->
         <one-to-many class="com.linys.model.User"/>
        </set>
 

双向:

many方和one方都进行配置,不过需要注意的是在指定外键时,名字要相同

 

四、多对多映射

1.数据库中表的情况

如一个老师带多个学生,一个学生可以被多个老师带

在数据库中存在三张表,教师,学生,以及两者的关联表

2.单向和双向加Object类中的差别

单向:many一方持有另一方对象

双向:双方持有

3.映射表中的配置

单向:

Many一方持有的对象配置

 

<?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="com.linys.model.Teacher">
		<id name="id">
			<generator class="native"></generator>
		</id>
		
		<property name="name"></property>
		<!-- 关联信息 -->
		<!-- name:该类包含的属性名  table指的是关联的表 -->
		<set name="students" table="t_s">
		    <!-- 该类在关联表中的信息 -->
		    <!-- 关联表中的字段 -->
			<key column="teacher_id"/>
			
			<!-- 与该类关联的类的信息 -->
			<!-- 类名,以及在关联表中的关联字段 -->
			<many-to-many class="com.linys.model.Student" column="student_id"/>
		</set>
    </class>
	
</hibernate-mapping>
 

 

双向:

1)many双方配置同单向

 

分享到:
评论

相关推荐

    Hibernate映射

    hibernate 映射关系 小结

    用Hibernate映射继承关系

    ### 用Hibernate映射继承关系 #### 14.1 继承关系树的每个具体类对应一个表 在Hibernate中映射继承关系时,一种常见的策略是将继承关系树的每个具体类映射到单独的数据库表中。这种方法称为**表/类映射**(Table/...

    hibernate 学习笔记小结

    ### Hibernate学习笔记小结 #### 一、简介与配置 **Hibernate** 是一款开源的对象关系映射(ORM)框架,它允许开发人员将Java对象自动持久化到数据库表中,从而简化了数据访问层的开发工作。在Spring框架中,...

    hibernate关系映射

    #### 七、小结 本篇文章主要介绍了 Hibernate 中关系映射的基本概念和实现方法。通过上述示例可以看出,Hibernate 提供了丰富的注解来支持不同类型的实体关系映射。理解这些关系对于有效地设计数据库模型和进行数据...

    关于Clob类型在Hibernate中 的应用小结

    4.1.3 **Hibernate映射文件**: 在Hibernate的XML映射文件中,你需要为这个Clob字段指定映射规则,例如: ```xml &lt;property name="summaryClob" type="org.hibernate.type.ClobType"&gt; ``` **CRUD操作**: ...

    hibernate一对多关联映射学习小结

    Hibernate一对多关联映射学习小结 Hibernate是一种流行的Java持久层框架,它提供了强大的对象关系映射(ORM)功能,能够将Java对象与关系数据库中表之间建立映射关系。Hibernate的关联映射是其核心功能之一,可以将...

    Hibernate的框架的总结

    - **简介**:映射文件用于定义实体类与数据库表之间的映射关系,是Hibernate实现对象关系映射的核心。 - **属性详解**: - `&lt;property&gt;` 元素用于指定实体类属性与数据库表字段之间的映射关系。 - `name` 属性:...

    hibernate小结

    ### Hibernate小结 #### 一、概述 在本篇文章中,我们将对Hibernate框架进行一个较为全面的小结。主要内容包括:Hibernate映射中的Lazy加载策略、Hibernate查询语言(HQL)的使用方法,以及一些基本配置与操作技巧...

    Struts2+Hibernate+Spring项目小结――Hibernate部分

    这里我们主要讨论SSH项目中的Hibernate部分,它是一个强大的对象关系映射(ORM)框架,使得开发者可以方便地将数据库操作与Java对象模型进行绑定。 1. 实体Bean的配置 在Spring中,配置Hibernate的SessionFactory...

    Hibernate 框架总结

    Hibernate是一个开源的Java框架,它为对象关系映射(Object Relational Mapping, ORM)提供了一种实现方式,允许Java程序员以面向对象的方式操作数据库。从Hibernate的核心概念、工作原理到其实现细节,Hibernate...

    关于Oracle的 Clob数据类型在Hibernate中的应用小结

    在实体类中定义Clob类型的属性,并在Hibernate映射文件中相应配置。这样可以避免一次性加载整个Clob内容到内存,从而降低内存消耗。 4.1 基本配置: 4.1.1 实体类: 在实体类中,声明一个Clob类型的属性,例如: ``...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    MAPPING Hibernate方法小结.doc

    【MAPPING Hibernate方法小结】 Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许开发者用面向对象的方式操作数据库。以下是对Hibernate中几种关键概念的详细解释: 1. **对象之间的关系**: - **...

    Hibernate操作Oarcle中Clob、Blob字段小结

    这篇博客文章“Hibernate操作Oracle中Clob、Blob字段小结”可能会探讨如何在Hibernate中有效地处理这两种类型的数据。 1. **Clob与Blob的理解**: - Clob:Clob是用于存储大量字符数据的类型,例如长篇文章、XML...

    Hibernate实战(第2版 中文高清版)

     1.5 小结   第2章 启动项目   2.1 启动Hibernate项目   2.1.1 选择开发过程   2.1.2 建立项目   2.1.3 Hibernate配置和启动   2.1.4 运行和测试应用程序   2.2 启动Java Persistence项目   2.2.1 ...

    Hibernate+struts实例学习

    #### 知识点小结 - 数据库设计与表创建是学习Hibernate与Struts实例的基础,需要掌握SQL语言和数据库基本操作。 - 在Java Web工程中配置数据源,了解不同数据库的配置方法和差异。 - Hibernate配置文件的编写,包括...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

Global site tag (gtag.js) - Google Analytics