1.需求

  用户和身份证是一一对应的关系。

  有两种对应方式:

    用户id作为身份证表的外键,身份证号作为主键;

    用户id作为身份证表的主键;

2.实体Bean设计

  User:

public class User {
private int userId;
private String userName;
private IDCard idCard;
set...
get...
}

  IDCard(用户id作为外键):

public class IDCard {
private String cardNum;
private String place;
private User user;
set...
get...
}

  IDCard(用户id作为主键):

public class IDCard {
  //必须有此属性作为主键
private int userId;
private String cardNum;
private String place;
private User user;
set...
get...
}

3.配置映射文件

  user.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="com.juaner.hibernate.idcard">
<class name="User" table="t_usercard">
<id name="userId" column="u_id">
<generator class="native"/>
</id>
<property name="userName" column="u_name"/>
<!--一对一映射-->
<one-to-one name="idCard" class="IDCard"/>
</class> </hibernate-mapping>

  用户id作为外键:

<?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="com.juaner.hibernate.idcard">
<class name="IDCard" table="t_idcard" >
<id name="cardNum">
<!--允许赋值-->
<generator class="assigned"/>
</id>
<property name="place"/>
<!--一对一映射,有外键而且唯一-->
<many-to-one name="user" class="User" column="user_id" cascade="save-update" unique="true" />
</class> </hibernate-mapping>

  用户id作为主键:

<?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="com.juaner.hibernate.idcard">
<class name="IDCard" table="t_idcard" >
<id name="userId">
<!--主键生成方式是foreign,即把别的表的主键作为当前表的主键
property指定引用的对象,根据对象可以找到对象的类及映射文件,
从而找到表的主键
-->
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<property name="cardNum"/>
<property name="place"/>
<!--基于主键的映射
constraint=true指定在主键上添加外键约束
-->
<one-to-one name="user" class="User" constrained="true" cascade="save-update" />
</class> </hibernate-mapping>

Hibernate中的一对一映射的更多相关文章

  1. Hibernate中的一对一映射关系

    Hibernate中的一对一映射关系有两种实现方法(单向一对一,和双向一对一)(一对一关系:例如一个department只能有一个manager) 单向和双向有什么区别呢??例如若是单向一对一,比如在 ...

  2. 【Hibernate步步】--一对一映射双向关联具体解释(两)

    很抱歉.有两天没更新博客文章,不要写文章一天真的感觉很是空的啊.制定一个写作习惯,想改也改不掉啊.说点题外话,前两天我收到一封私人信件给朋友,我写邀请函的文章OWS文章.一种技术用于研究图标工具,这位 ...

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

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

  4. Hibernate中的一对一关联

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

  5. 【Hibernate 3】一对一映射配置

    一.一对一映射简介 一对一关联映射有两种实现策略: 第一种:主键关联,即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联 ...

  6. Hibernate总结(二)---hibernate中的各种映射

    知识的准备: (参考:汤阳光Hibernate3.6(基础)) 一.浅谈javaBean之间的关系 存在的关系: 1.关联(一对一.一对多.多对一.多对多) 2.聚合/组合(最后考虑) 3.继承 所以 ...

  7. Hibernate中的实体映射

     一.一对一映射  如人(Person)与身份证(IdCard) 的关系,即为一对一的关系,一个人只能有一张身份证,一张身份证只能属于某一个人,它们的关系图如下图所示: 在Person实体中添加一个属 ...

  8. Hibernate中的一对一关系详解(1)

    A:先讲讲一对一的关系(欲知其他关系,请看下篇) a:主键关联的一对一关系 一对一关系一般用主键关联,也就是说用主键值来维护两者的关系,一个表的主键存放另一个表的主键值.例如在员工与帐号中,我们取员工 ...

  9. Hibernate中的继承映射

    1.继承映射 继承映射分为两种情况:简单继承映射和继承映射. 在简单继承映射中,每个子类都要写一个映射文件. 在继承映射中,只使用一个映射文件.继承映射分为三种情况: 所有子类映射到一张表 需要使用鉴 ...

随机推荐

  1. linux mount命令的用法详细解析

    挂接命令(mount)首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的.命令格式:mount [-t vfstype] [-o options] ...

  2. 可视化工具之 IGV 使用方法

    整合基因组浏览器(IGV)是一种高性能的可视化工具,用来交互式地探索大型综合基因组数据.它支持各种数据类型,包括array-based的和下一代测序的数据和基因注释. IGV这个工具很牛,发了NB: ...

  3. EF Core » 影子属性

    Caution:注意 This documentation is for EF Core. For EF6.x and earlier release see http://msdn.com/data ...

  4. CFX客户端调用报错

    Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unex ...

  5. 制作ubuntu安装u盘

    Ubuntu官方中文译名为友帮拓,是一款开源免费的linux操作系统.与其他的linux操作系统不同之处在于Ubuntu的软件包清单只包含那些高质量的重要应用程序,因此深受广大linux用户的喜爱,那 ...

  6. CentOS怎样查看系统信息

    一.查看系统版本和核心版本 1 登陆CentOS,启动终端. 2 登陆root帐户,输入 cat  /etc/redhat-release,即可显示系统版本. 3 输入 uname  -r ,可以查询 ...

  7. java synchronized静态同步方法与非静态同步方法,同步语句块

    摘自:http://topmanopensource.iteye.com/blog/1738178 进行多线程编程,同步控制是非常重要的,而同步控制就涉及到了锁. 对代码进行同步控制我们可以选择同步方 ...

  8. 爬虫基础学习 转【http://www.cnblogs.com/huangxincheng/archive/2012/11/08/2759752.html】

    这一篇我们聊聊在页面抓取时应该注意到的几个问题. 一:网页更新 我们知道,一般网页中的信息是不断翻新的,这也要求我们定期的去抓这些新信息,但是这个“定期”该怎么理解,也就是多长时间需要 抓一次该页面, ...

  9. cf------(round 2)A. Winner

    A. Winner time limit per test 1 second memory limit per test 64 megabytes input standard input outpu ...

  10. Xcode8 及iOS10适配问题汇总

    上点干货,目前得知的一些bug解决汇总:iOS10相册相机闪退bughttp://www.jianshu.com/p/5085430b029fiOS 10 因苹果健康导致闪退 crashhttp:// ...