`

Hibernate一对一映射配置详解

 
阅读更多

一对一关联分为主键关联与外键关联。

主键关联:不必加额外的字段,只是主表和辅表的主键相关联,即这两个主键的值是一样的。

外键关联:辅表有一个额外的字段和主表相关联,或者两个表都有额外的字段与对应表的相关联。

一、xml文件配置

    官方文档解释

<one-to-one

        name="propertyName"                                (1)

        class="ClassName"                                       (2)

        cascade="cascade_style"                                (3)

        constrained="true|false"                              (4)

        fetch="join|select"                               (5)

        property-ref="propertyNameFromAssociatedClass"         (6)

        access="field|property|ClassName"                       (7)

        formula="any SQL expression"                           (8)

        lazy="proxy|no-proxy|false"                         (9)

        entity-name="EntityName"                         (10)

        node="element-name|@attribute-name|element/@attribute|."

 

        embed-xml="true|false"

        foreign-key="foreign_key_name"

/>

    (1) name: 属性的名字。

(2) class (可选 - 默认是通过反射得到的属性类型):被关联的类的名字。

    (3) cascade(级联) (可选):表明操作是否从父对象级联到被关联的对象。

(4) constrained(约束) (可选):表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。 这个选项影响save()delete()在级联执行时的先后顺序以及 决定该关联能否被委托(也在schema export tool中被使用).

    (5) fetch (可选 - 默认设置为选择): 在外连接抓取或者序列选择抓取选择其一.

    (6) property-ref (可选):指定关联类的属性名,这个属性将会和本类的主键相对应。如果没有指定,会使用对方关联类的主键。

    (7) access (可选 - 默认是 property): Hibernate用来访问属性的策略。

    (8) formula (可选):绝大多数一对一的关联都指向其实体的主键。在一些少见的情况中, 你可能会指向其他的一个或多个字段,或者是一个表达式,这些情况下,你可以用一个SQL公式来表示。 (可以在org.hibernate.test.onetooneformula找到例子)

    (9) lazy (可选 - 默认为 proxy): 默认情况下,单点关联是经过代理的。lazy="no-proxy"指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche lazily)(需要运行时字节码的增强)。 lazy="false"指定此关联总是被预先抓取。注意,如果constrained="false", 不可能使用代理,Hibernate会采取预先抓取!

(10) entity-name (可选): 被关联的类的实体名。


 

 

1. 主键关联

唯一外键关联:

: UserAccount,一个用户对应一个账户。

配置文件都用one-to-one,在辅表的one-to-one的属性里要加constrained="true"表示受到约束。所以,将辅表的id改成foreign然后加上属性参数等。

User

 

Account

 

    User类与配置文件

    private Integer id;

   private String username;

   private String password;

   private Account account;

    one-to-one中的class属性可以不写,默认Hibernate会使用反正自己去寻找。

<one-to-one name="account" class="piaohan.domain.Account"cascade="all" />

    Account类与配置

   private Integer id;

   private String accountNum;

   private Integer money;

   private User user;

   

      <id name="id" column="id">

         <generator class="foreign">

            <param name="property">user</param>

         </generator>

      </id>

      <one-to-one name="user" constrained="true"

         class="piaohan.domain.User">

      </one-to-one>

    constrained="true"表示这个属性(name="user")对应类型的表(user表),对我现在的表(account表)形成了外键约束,user表的主键对account表的主键形成了外键约束。

该种方式如果删除想删除user对象中的account对象,不能直接删除account,需要先删除双方关系,如user.setAccount(null);或者在account方加上cascade


 

 

2. 单方外键关联

: UserAccount,一个用户对应一个账户。

User

 

Account

 

这种关联Account是用many-to-one然后用unique="true"做限制,限制成一对一的关系。所以,一对一的外键关联其实就是多对一关联的一种特例。

User类与配置

   private Integer id;

   private String username;

   private String password;

   private Account account;

 

   <one-to-one name="account" class="piaohan.domain.Account"

cascade="all" property-ref="user" />

property-ref="user" 表示关联类的属性名,即对应类的保存本类的属性名,该例在User中,表示对应类Account中,保存User属性的属性名,即user

    Account类与配置

   private Integer id;

   private String accountNum;

   private Integer money;

   private User user;

 

<many-to-one name="user" unique="true" column="userid" />


 

 

3. 双方外键关联

如果关联双方都是外键关联,那可以两边都用many-to-one

    User配置(类不变)

   

   <many-to-one name="account" cascade="all" unique="true"

         column="accountid" />

    Account配置(类不变)

 

<many-to-one name="user" unique="true" column="userid"

         cascade="all" />

分享到:
评论

相关推荐

    详解Hibernate一对一映射配置

    个人的很详细的Hibernate一对一映射配置详解,对初学者有帮助!

    Hibernate一对多映射配置详解

    Hibernate一对多映射配置详解,很值得借鉴

    Hibernate各种表关系映射配置详解

    Hibernate各种表关系映射配置详解,自己进行整理的,里面有一对多,多对多,多对一等各种关系的映射详解

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    hiberate映射详解

    hibernate 映射关系详解,有一对一,一对多和多对一,多对多

    SSH--Hibernate详解

    详细概述了Hibernate(ORM原理,核心配置,映射配置,一对一,一对多,多对多的关联关系)

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

     15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射  15.2 映射单向多对多关联  15.3 映射双向多对多关联关系  15.3.1 关联两端使用元素  15.3.2 在inverse端使用元素  15.3.3 使用组件类...

    Hibernate详解

    该文档详细讲解了Hibernate的几个核心技术:Hibernate的配置文件、缓存机制、查询策略、事务管理、HQL和QBC、一对多、一对一、多对多映射关系、继承映射等,并且还有配有实例。

    hibernate 框架详解

    一对一(one to one) 8.5. 使用连接表的双向关联(Bidirectional associations with join tables) 8.5.1. 一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多...

    hibernate事务源码

    (1) hibernate一种ORM工具,是连接 java 应用程序 和关系数据库的中间件,这是对JDBC的封装,主要负 责 java 对象的持久化. (2)Hibernate是自动根据xml配置完成对象映射关系, 并根据提供的API完成持久化处理。 (3)是...

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

     15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射  15.2 映射单向多对多关联  15.3 映射双向多对多关联关系  15.3.1 关联两端使用元素  15.3.2 在inverse端使用元素  15.3.3 使用组件类...

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

     15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射  15.2 映射单向多对多关联  15.3 映射双向多对多关联关系  15.3.1 关联两端使用元素  15.3.2 在inverse端使用元素  15.3.3 使用组件类...

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

     15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射  15.2 映射单向多对多关联  15.3 映射双向多对多关联关系  15.3.1 关联两端使用元素  15.3.2 在inverse端使用元素  15.3.3 使用组件类...

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

     7.1.2 一对一的外键关联   7.1.3 用联结表映射   7.2 多值的实体关联   7.2.1 一对多关联   7.2.2 多对多关联   7.2.3 把列添加到联结表   7.2.4 映射map   7.3 多态关联   7.3.1 多态的多对一...

    低清版 大型门户网站是这样炼成的.pdf

    4.2.4 hibernate的映射配置文件 201 4.2.5 体验hibernate(会员管理) 203 4.3 hibernate的映射机制 212 4.3.1 hibernate的基本映射数据类型 212 4.3.2 hibernate的主键映射 218 4.3.3 hibernate的实体映射 228...

    Java Web程序设计教程

    9.3.1一对一关联关系的使用 196 9.3.2一对多、多对一关联关系的使用 197 9.3.3多对多关联关系的使用 199 9.4hibernate过滤 201 9.4.1session过滤 201 9.4.2filter过滤 201 9.5项目实战——客户订单管理 202 ...

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    Spring3.x企业应用开发实战(完整版) part1

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

Global site tag (gtag.js) - Google Analytics