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映射文件one-to-one的更多相关文章

  1. Hibernate映射文件如何配置触发器

    Hibernate映射文件之触发器生成(generated属性.database-object元素) (2013-02-27 12:28:49) 转载▼ 标签: it 分类: JAVA学习笔记 这里分 ...

  2. Spring集成Hibernate映射文件的4种方式

    概要: 在Spring的applicationContext.xml中集成Hibernate映射文件,通常是在<sessionFactory>这个Bean实例中进行的,若配置的映射文件较少 ...

  3. Java学习笔记(十三)——通过Netbeans开发环境生成oracle数据库中表的对应hibernate映射文件

    [前面的话] 身体慢慢已经快好了,感觉真好,哈哈. 这篇文章要通过Hibernate对数据库进行操作,而Netbeans可以直接通过数据库逆向生成对应的映射文件.基础文章,选择性阅读. [步骤] 1. ...

  4. spring配置hibernate映射文件-------通配符

    <!-- 这里一定要注意是使用spring的mappingLocations属性进行通配的 -->      <property name="mappingLocation ...

  5. 生成 hibernate 映射文件和实体类

    创建web工程,使用Hibernate的时候,在工程里一个一个创建实体类太麻烦,浪费时间,现在教大家如何用MyEclipse自动生成Hibernate映射文件及实体类 方法/步骤   创建数据库,创建 ...

  6. hibernate映射文件set key one-to-many

    转自:https://www.linuxidc.com/Linux/2013-11/92228.htm 1 hibernate映射文件set key one-to-many的配置. POJOs如下: ...

  7. LocalSessionFactoryBean有几个属性查找hibernate映射文件

    LocalSessionFactoryBean有几个属性查找hibernate映射文件: mappingResources.mappingLocations.mappingDirectoryLocat ...

  8. Hibernate映射文件详解(News***.hbm.xml)二

    转自 http://blog.csdn.net/a9529lty/article/details/6454924 一.hibernate映射文件的作用: Hibernate映射文件是Hibernate ...

  9. Hibernate映射文件详解(News***.hbm.xml)一

    Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...

  10. hibernate映射文件

    Hibernate的持久化类和关系数据库之间的映射通常是用一个XML文档来定义的.该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射.这意味着映射文档是按照持久化类的定义来创建 ...

随机推荐

  1. .Net基础

     标题  状态  内容        NET应用程序是如何执行的?    http://www.cnblogs.com/kingmoon/archive/2012/07/16/2594459.html ...

  2. SQL语句 - 基本查询

    select select_list [ into new_table ] from table_source [ where search_condition ] [ group by broup_ ...

  3. 萝卜叶万能助手SEO网络营销简介

    萝卜叶万能助手专业版是就是将我们10年的SEO经验和方法汇聚于一体的结晶,旨在打造一款使用简单方便,功能强大的SEO软件,以便节省您的时间,提高您收集资料.维护网站.发布帖子.进行网络营销的效率. 借 ...

  4. C# WinForm程序打印条码 Code39码1

    做WinForm程序需要打印条码,为了偷懒不想自己写生成条码的程序在网上下载一个标准的39码的字体,在程序里面换上这个条码字体即可打印条码了. 最重要的一点作为记录: 如果想把“123456789”转 ...

  5. 一个方法告诉你as3的removeChild性能有多烂

    其实as3这个坑我早就踩过,不过那时没太注意,最近把项目的removeChild干掉换成了visible=false,发现效率质的提升…… 先贴一下代码吧 private function testR ...

  6. iOS 7新功能例子

    参考https://github.com/shu223/iOS7-Sampler Code examples for the new functions of iOS 7. Contents Dyna ...

  7. win7下IE主页无法修改,IE设置无法保存解决方案

    转自:http://www.myhack58.com/Article/48/65/2012/34411.htm 经测,有效! 现象如下: 1.开启后,首先总是指向http://go.microsoft ...

  8. 【转】web集群时session同步的3种方法

    转载请注明作者:海底苍鹰地址:http://blog.51yip.com/server/922.html 在做了web集群后,你肯定会首先考虑session同步问题,因为通过负载均衡后,同一个IP访问 ...

  9. JS文档和Demo自动化生成工具 - SmartDoc发布

    曾几何时,当你码神附体,一路披荆斩棘的完成代码后,带着“一码在手,天下我有”的傲然环顾之时,却发现单元测试.API文档.Demo实例陆续向你砸来,顿时有木有一种冰水挑战后的感觉.而这时你应该:哟哟,快 ...

  10. `cocos2dx非完整` 开始自己的FW模块

    上一篇的文章中说到了一些个人习惯的东西以及一些简单的项目配置,这一篇文章我们来进一步完善一些东西.首先,打开编译以后的客户端执行,会看到一大堆的fileutils加载luac文件的提示,在终端显示一大 ...