1.按照外键映射(Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射)

实现需要:

创建实体类Users1和Resume1

public class Users1 {

private Integer userid;

private String username;

private String userpass;

private Resume1 resume1;

}

***********

public class Resume1 {

private Integer resid;

private String resname;

private String rescardno;

private Users1 users1;

}

-----------------------

配置文件Users1.hbm.xml和Resume1.hbm.xml:

Users1.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.happy.onetoone_fk">

<class name="Users1" table="USERS1">

<id name="userid" column="USERID" >

<generator class="native"></generator>

</id>

<property name="username" column="USERNAME" type="string"></property>

<property name="userpass" column="USERPASS" type="string"></property>

<one-to-one name="resume1" class="Resume1" property-ref="users1"></one-to-one>

</class>

</hibernate-mapping>

*********************

Resume1.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.happy.onetoone_fk">

<class name="Resume1" table="RESUME1">

<id name="resid" column="RESID" >

<generator class="native"></generator>

</id>

<property name="resname" column="RESNAME" type="string"></property>

<property name="rescardno" column="RESCARDNO" type="string"></property>

<many-to-one name="users1" class="Users1" cascade="all" column="RESUSERID" unique="true"></many-to-one>

</class>

</hibernate-mapping>

------------------------------------

2.主键映射

实现需要:

创建实体类Users2和Resume2

public class Users2 {

private Integer userid;

private String username;

private String userpass;

private Resume2 resume2;

}

*******************:

public class Resume2 {

private Integer resid;

private String resname;

private String rescardno;

private Users2 users2;

}

----------------------------

配置文件Users1.hbm.xml和Resume1.hbm.xml

Users1.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.happy.onetoone_pk">

<class name="Users2" table="USERS2">

<id name="userid" column="USERID" >

<generator class="foreign">

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

</generator>

</id>

<property name="username" column="USERNAME" type="string"></property>

<property name="userpass" column="USERPASS" type="string"></property>

<one-to-one name="resume2" class="Resume2" constrained="true"></one-to-one>

</class>

</hibernate-mapping>

************************

Resume2.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.happy.onetoone_pk">

<class name="Resume2" table="RESUME2">

<id column="RESID" name="resid">

<generator class="native"/>

</id>

<property column="RESNAME" name="resname" type="string"/>

<property column="RESCARDNO" name="rescardno" type="string"/>

<one-to-one  name="users2" cascade="all" class="Users2"/>

</class>

</hibernate-mapping>

==========================================

一  。组件映射(建立关系数据模型的一个重要原则是在不会导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系)

实现需求:

创建EmpHomeAddress和EmpInfo

public class EmpHomeAddress {

private String ehomestreet;

private String ehomecity;

private String ehomeprovince;

private String ehomezipcode;

private EmpInfo empinfo;

}

--------------

public class EmpInfo {

private Integer eid;

private String ename;

private EmpHomeAddress ehome;

}

*************************

创建配置文件EmpInfo.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.happy.component">

<class name="EmpInfo" table="EMPINFO">

<id name="eid" column="EID">

<generator class="native"></generator>

</id>

<property name="ename" column="ENAME" type="string"></property>

<component name="ehome" class="EmpHomeAddress">

<parent name="empinfo"/>

<property name="ehomestreet" column="EHOMESTREET" type="string"></property>

<property name="ehomecity" column="EHOMECITY" type="string"></property>

<property name="ehomeprovince" column="EHOMEPROVINCE" type="string"></property>

<property name="ehomezipcode" column="EHOMEZIPCODE" type="string"></property>

</component>

</class>

</hibernate-mapping>

.Hibernate一对一映射与组件映射的更多相关文章

  1. Hibernate征途(五)之继承映射和组件映射

    之所以把这两种映射放到一起说,是因为二者都是以复用为目的,减少了代码和配置量,这是相同点:二者之间的不同点类似继承和实现的区别:继承的类是一个事物的抽象,而实现的接口仅仅是功能的抽象. 继承映射 如上 ...

  2. Hibernate第九篇【组件映射、继承映射】

    前言 到目前位置,我们已经学习了一对一.一对多.多对一.多对多映射了-既然Hibernate是ORM实现的框架,它还提供了组件映射和继承映射..本博文主要讲解组件映射和继承映射 Java主要的类主要有 ...

  3. hibernate(七)组件映射与多对一映射

    一.组件映射 用注解配置组件映射: Husband为我们映射的类,wife是这个类的一部分(属性不能与husband中属性重名,不要写Entity注解,不要有主键) Husband类:(在getWif ...

  4. Hibernate组件映射

    Hibernate联合主键映射以及组件映射 在Hibernate中联合主键的形成有两种可能:一种是由多对多映射形成的,多对多映射会形成第三张表,一般来说第三张表的主键是由其他两张表的主键构成的(比如学 ...

  5. java之hibernate之组件映射

    1.在开发中,有的类信息比较复杂,而且某几个信息可以组成某一个部分,这个时候可以采用组件映射,组件映射是一张表映射到多个类.表结构 2.类的设计 Link.java public class Link ...

  6. Hibernate征途(七)之复合主键映射和集合映射

    把这两种映射放到一起说,是因为这两种映射不像前面的复用型映射.数量和方向型映射那么分类鲜明,所以放到了这个“其他”里面. 复合主键映射 在关系模型中,复合主键和其他的主键方式没有很大区别,但是反映到对 ...

  7. hibernate学习四(关系映射一对一与组件映射)

    一.关系映射简介 在数据库中,表与表的关系,仅有外键.但使用hibernate后,为面向对象的编程,对象与对象的关系多样化:如 一对一,一对多,多对多,并具有单向和双向之分. 开始练习前,复制上一次项 ...

  8. Hibernate中一对一关联映射/组件映射

    Hibernate映射:一对一关联 1.按照外键映射 2.按照主键映射 组件映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映射方式分别 ...

  9. Hibernate中的一对一关联和组件的映射

    Hibernate提供了两种映射一对一映射关联关系的方式: 01.按照外键映射 02.按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这 ...

随机推荐

  1. 生成package.json和bower.json

    1.安装nodejs 2.安装bower工具   cmd:npm bower install 3.生成package.json  cmd:npm init 4.生成bower.json cmd:bow ...

  2. contains选择器

    有这样一个问题: 一个列表里面,很多option,但是在不知道value,只知道他的内容的时候,怎么进行选择,比如: 北京市天津市上海市重庆市 在不知道他的value和index的时候,选择北京市,能 ...

  3. javascript原型prototype的一个你不一定知道的理解

    原型和原型链的故事 相关文章: 为什么原型继承很重要 先来看看一段小代码用以引入要讲的小故事. function Foo() {}; var f1 = new Foo(); Foo.prototype ...

  4. Java枚举类型理解

    Enum格式理解 Enum的格式可以看做跟class关键字一样 class的定义格式如下: public class abc{ } enum的定义格式如下: Public enum abc { } 引 ...

  5. JavaScript—window对象使用

    window对象是JavaScript浏览器对象模型中的顶层对象,包含多个常用方法和属性: 1. 打开新窗口 window.open(pageURL,name,parameters) 其中:pageU ...

  6. this,super关键字的使用

    this关键字 1.this是对象的别名,是当前类的实例引用 2.在类的成员方法内部使用,代替当前类的实例.在Java中,本质上是指针,相当于C++中的指针概念.如果方法中的成员在调用前没有操作实例名 ...

  7. Swift - 13 - 字符串和Character

    //: Playground - noun: a place where people can play import UIKit var str = "hi" // 字符串拼接 ...

  8. angularJS学习手册(1)

    欢迎来到augularJS的学习 一.什么是angularJS? angular的英文意思是角,为什么要叫angular我也不知道. AngularJS是一个MV*(Model-View-Whatev ...

  9. cocos2dx lua调用C++类.

    最近需求所迫, 终于着手传说中的 lua 了. 折腾了4天, 总算大概搞明白了用法. 细节咱们就别谈了, 直接说项目里怎么跑起来. 准备工作 我们需要一系列繁琐的前奏. tolua++: 这是必备工具 ...

  10. 你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数

    6.2.4  拷贝构造函数 在C++世界中,除了需要使用构造函数直接创建一个新的对象之外,有时还需要根据已经存在的某个对象创建它的一个副本,就像那只叫做多利的羊一样,我们希望根据一只羊创建出来另外一只 ...