`
wangyanlong0107
  • 浏览: 499734 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

hibernate映射文件one-to-one 元素属性(转)

 
阅读更多

  1. one-to-one 元素

属性:

  1. name:映射类属性的名字
  2. class:映射的目标类
  3. cascade:设置操作中的级联策略 可选值为 all所有操作情况均进行级联、none所有操作情况均不进行级联、save-update执行更新操作时级联、delete执行删除操作时级联
  4. constrained:表明当前类对应的表与被关联的表之间是否存在着外键约束 默认值为false
  5. fetch:设置抓取数据的策略 可选值为 join外连接抓取、select序列选择抓取
  6. property-ref:设置关联类的属性名,此属性和本类的主键相对应 默认值为关联类的主键
  7. access:Hibernate访问这个属性的策略 默认值为property
  8. formula:绝大多数一对一关联都指向其实体的主键。在某些情况下会指向一个或多个字段或是一个表达式,此时可用一个SQL公式来表示
  9. lazy:指定是否采用延迟加载及加载策略 默认值为proxy通过代理进行关联 可选值为 true此对象采用延迟加载并在变量第一次被访问时抓取、false此关联对象不采用延迟加载
  10. entity-name:被关联类的实体名

单向1——1关联:

需要在实体中提供setter、getter方法;

事实上单向的1——1和N——1配置非常相似;只需要在many-to-one元素增加 unique="true"属性,用于表示N的一端必须是唯一的即可!(既然N的一端加了唯一性约束那么就成了1——1了!)

A、基于外键的单向1——1关联:

将无连接表的many-to-one元素增加 unique="true"属性,即可完成映射!

    eg:

<!-- 用于映射1-1关联实体,指定关联实体类为Address
    指定外键列名为addressId,并指定级联全部操作 -->
  <many-to-one name="address" cascade="all"
    unique="true" class="Address" 
    column="addressId"/>

 

B、有连接表的单向1——1关联:

将连接表的many-to-one元素增加 unique="true"属性,即可完成映射!

 

eg:

<!-- 映射连接表中参照关联实体的外键列 -->
   <many-to-one name="address" cascade="all"
     unique="true" class="Address" 
     column="addressId"/>

C、基于主键的单向1——1关联:

eg:

<class name="Person">
   <!-- 映射标识属性personid -->
   <id name="personid" column="addressid">
    <!-- 基于主键关联时,主键生成策略是foreign,
     表明根据关联类的主键来生成本表主键 -->
   <generator class="foreign">
     <!-- 指定引用关联实体的属性名 -->
     <param name="property">address</param>
    </generator>
   </id>
   <!-- 用于映射普通属性 -->
   <property name="name" type="string"/>
   <property name="age" type="int"/>
   <!-- 下面映射基于主键的1-1关联 -->
  <one-to-one name="address"/>
</class>

 

双向1——1关联:

需要在两边实体类中增加引用关联实体的属性:

A、 基于外键的双向1——1关联:

    基于外键的1——1关联,外键可以存放在任意一端,

  1.        存放的一端要增加many-to-one元素,并添加unique=”true“,
  2.        另一端使用one-to-one元素,使用property-ref指定引用关联类的属性;

eg:

Preson.hbm.xml
<!-- one-to-one元素映射关联属性,外键列在对方的表内
    person-ref指定引用关联类的属性。
    即:在address属性所属的Address类内,
    必须有person属性的setter和getter方法 -->
   <one-to-one name="address" property-ref="person"/>

 

Address.hbm.xml

   <!-- 使用many-to-one映射1-1关联实体 
    unique="true"确定为1-1-->
   <many-to-one name="person" unique="true"
    column="person_id" not-null="true"/>

 

B、基于主键的双向1——1关联:

             主键映射策略,一端的主键生成器必须使用foreign策略,表名根据对方的主键生成策略来生成自己的主键本实体不能拥有自己的主键生成策略;

 

eg:
Preson.hbm.xml

<!-- one-to-one元素映射关联属性 -->
<one-to-one name="address"/>

Address.hbm.xml

<!-- Address持久化类-->
<class name="Address">
   <!-- 映射标识属性addressid -->
   <id name="addressid">
    <!-- 指定foreign主键生成器策略-->
    <generator class="foreign">
    <!-- 指定根据主键将根据person属性引用的
      关联实体的主键来生成-->
    <param name="property">person</param>
    </generator>
   </id>
   <!-- 映射普通属性addressdetail -->
   <property name="addressdetail"/>
   <!-- 用于映射关联属性 -->
  <one-to-one name="person"/>
</class>

 

C、有连接表的双向1——1关联:

   用的比较少,只给出例子:

eg:

Preson.hbm.xml

<!-- 使用join元素强制使用连接表 -->
<join table="person_address" inverse="true">
    <!-- 映射连接表中参照本实体主键的外键列 -->
   <key column="person_id" unique="true"/>
   <!-- 映射1-1关联实体 -->
    <many-to-one name="address" class="Address"
     unique="true" column="address_id"/>
   </join>

 

Address.hbm.xml

<!-- 使用join元素强制使用连接表 -->
  <join table="person_address" optional="true">
    <!-- 映射连接表中参照本实体主键的外键列 -->
    <key column="address_id" unique="true"/>
   <!-- 映射1-1关联实体 -->
    <many-to-one name="person" class="Person"
     unique="true" column="person_id" />
   </join>

分享到:
评论

相关推荐

    hibernate学习5之one-to-many双向关联.docx

    在XML映射文件中,`Student.hbm.xml`包含了`&lt;many-to-one&gt;`元素,表示学生对象引用了一个班级对象,通过`classesid`列连接。而`Classes.hbm.xml`则使用了`&lt;set&gt;`和`&lt;one-to-many&gt;`元素,表示班级对象包含一个学生...

    Hibernate one-to-many-annotation

    在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...

    Hibernate-one-to-many

    本文将深入探讨Hibernate中一对多(One-to-Many)关系的处理方式,特别是通过外键映射和inverse属性的应用场景。 #### 一对多关系概念 一对多关系在数据库设计中非常常见,它指的是一个实体可以与多个其他实体关联...

    NHibernate One-to-Many一对多映射-xxlinux_com

    `&lt;one-to-many&gt;`元素指定了子实体的类型。 在C#代码中,`User`类会有一个`Orders`属性,它是`Order`类型的集合: ```csharp public class User { public virtual int Id { get; set; } // ...其他属性... ...

    Hibernate映射笔记

    - `&lt;one-to-one&gt;`、`&lt;many-to-one&gt;`、`&lt;one-to-many&gt;`和`&lt;many-to-many&gt;`:分别用于一对一、一对多、多对一和多对多的关系映射,通过`&lt;class&gt;`元素的嵌套和属性如`inverse`、`cascade`等来控制关系的维护方式和级联...

    Hibernate 映射文件 结构

    1. **&lt;hibernate-mapping&gt;**:根元素,声明这是Hibernate映射文件。 2. ****:定义一个Java类与数据库表的映射。属性包括`name`(类的全限定名)和`table`(对应的数据库表名)。 3. ****:标识符(主键)映射,每...

    Hibernate配置文件中映射元素详解

    ### Hibernate映射文件基础结构 映射文件通常以`&lt;!DOCTYPE hibernate-mapping&gt;`开头,引用DTD(文档类型定义),确保文件遵循正确的格式。例如: ```xml &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/...

    hibernate中one2many映射

    在Java的持久化框架Hibernate...综上所述,Hibernate中的One-to-Many映射涉及了映射文件的编写、Domain对象的设计、数据库配置以及CRUD操作。理解并熟练掌握这些内容,将有助于你在实际项目中高效地处理多对一的关系。

    Hibernate实现many-to-many的映射关系

    3. 在对应的映射文件中,使用`&lt;set&gt;`和`&lt;one-to-many&gt;`或`&lt;many-to-one&gt;`元素配置映射关系。 4. 如有必要,可以考虑将多对多关系转换为一对多,以优化性能和操作性。 理解并熟练掌握这些概念和实践,将有助于在使用...

    Hibernate映射配置实例大全(详细总结)

    例如,我们可以用`&lt;id&gt;`标签来标识主键,`&lt;property&gt;`标签映射普通字段,而`&lt;one-to-one&gt;`, `&lt;many-to-one&gt;`, `&lt;one-to-many&gt;`, 和 `&lt;many-to-many&gt;`则用于描述关联关系。 进一步,Hibernate提供了注解方式进行映射...

    hibernate5.2版本配置和映射dtd文件

    1. `&lt;hibernate-mapping&gt;`:根元素,定义映射文件的开始,通常会指定一个package属性,表示该文件中实体类所在的Java包。 2. `&lt;class&gt;`:表示一个Java类,包含`name`属性指定类名,`table`属性指定对应的数据库表。 ...

    Hibernate映射集合属性List

    本文将详细探讨如何使用Hibernate映射集合属性List,以及如何让Hibernate自动创建对应的数据库表,无需手动编写SQL语句。 首先,我们需要理解Hibernate的映射机制。Hibernate通过ORM(对象关系映射)技术将Java对象...

    hibernate many to one

    在Java的持久化框架Hibernate中,"Many-to-One"关系是一种常见的关联映射类型,它表示一个实体(类)可以与多个其他实体实例相关联。在这个主题中,我们将深入探讨Hibernate如何处理这种关系,以及如何在实际编程中...

    hiberate映射详解

    使用 `many-to-one` 元素在子类中定义对父类的引用,同时在父类中使用 `one-to-many` 元素声明子类的集合。外键通常位于子类的表中。例如,一个部门可以有多名员工,部门类可以定义一个 Employee 集合。 3. **多对...

    hibernate的dtd文件

    例如,一个简单的映射文件可能包含`&lt;class&gt;`元素来指定Java类,`&lt;id&gt;`元素表示主键,`&lt;property&gt;`元素表示普通字段,而`&lt;many-to-one&gt;`或`&lt;one-to-many&gt;`元素则用于定义一对多或多对一的关系。 在实际开发中,理解...

    Hibernate学习要点_one2one 一对一主键双线关联

    在Hibernate中,我们可以利用`@OneToOne`注解或者在XML配置文件中使用`&lt;one-to-one&gt;`元素来实现这种关系的映射。 ### 主键双线关联的实现 在给出的部分内容中,我们可以看到一个具体的示例,展示了如何在Hibernate...

    Hibernate映射

    可以使用`@OneToOne`注解或在XML文件中定义`one-to-one`元素来实现。 **四、一对多(One-to-Many)映射** 在实体类中,使用`@OneToMany`注解或者在XML中配置`bag`、`list`、`set`等集合类型来表示一对多关系。可以...

    hibernate_6映射关系之one2many.zip_hibernate

    在Java的持久化框架Hibernate中,`One-to-Many`映射关系是对象关系映射(ORM)中常见的一种关联类型。它表示一个实体("One"端)与多个其他实体("Many"端)之间的关系。例如,一个学生可以有多个课程,一个老师可以...

    hibernate关联映射的作用和常用属性解释

    `&lt;one-to-many&gt;`元素 用于表示一对多的关联关系。例如一个班级有多个学生: - **`class`**:关联的类的全限定名,例如`com.example.Address`。 - **`not-found`**:当未找到关联实体时的行为,默认为`exception`...

    hibernate集合的映射

    这里的`&lt;set&gt;`元素定义了一个名为`phoneNumbers`的Set集合,对应的数据库表是`USER_PHONE`,`&lt;key&gt;`元素指定了外键列`USER_ID`,`&lt;one-to-many&gt;`元素则指定了关联的实体类`PhoneNumber`。 二、List集合映射 List...

Global site tag (gtag.js) - Google Analytics