示例:一个人(person) 住一个地址(address),一个地址有一个人。

Java代码  
  1. public class Person {
  2. private Integer id;
  3. private String name;
  4. private Address address;
  5. //getter and setter
  6. }
Java代码  
  1. public class Address {
  2. private Integer id;
  3. private String detail;
  4. private Person person;
  5. //getter and setter
  6. }

用XML映射

Xml代码  
  1. <hibernate-mapping package="org.monday.hibernate4.domain">
  2. <class name="Person" table="tbl_person">
  3. <id name="id">
  4. <generator class="identity" />
  5. </id>
  6. <property name="name" />
  7. <many-to-one name="address" class="Address" column="address_id" unique="true"/>
  8. </class>
  9. </hibernate-mapping>
Xml代码  
  1. <hibernate-mapping package="org.monday.hibernate4.domain">
  2. <class name="Address" table="tbl_address">
  3. <id name="id">
  4. <generator class="identity"/>
  5. </id>
  6. <property name="detail" />
  7. <one-to-one name="person" class="Person" property-ref="address" />
  8. </class>
  9. </hibernate-mapping>

1、 tbl_address 表中使用外键来完成一对一关联,限制多方最多只能有一条记录参考到一方,
这是多对一的一个特列。所以设置 <many-to-one> 的 unique 的属性为 true 。
2、 <one-to-one> 的 property-ref 属性 指定引用关联类的属性。

用@Annotation映射

Java代码  
  1. @Entity
  2. @Table(name = "tbl_person")
  3. public class Person {
  4. @Id
  5. @GeneratedValue(strategy = GenerationType.IDENTITY)
  6. private Integer id;
  7. private String name;
  8. @OneToOne
  9. @JoinColumn(name = "address_id", unique = true)
  10. private Address address;
  11. // getter and setter
  12. }
Java代码  
  1. @Entity
  2. @Table(name = "tbl_address")
  3. public class Address {
  4. @Id
  5. @GeneratedValue(strategy = GenerationType.IDENTITY)
  6. private Integer id;
  7. private String detail;
  8. @OneToOne(mappedBy = "address")
  9. private Person person;
  10. // getter and setter
  11. }

测试代码

Java代码  
  1. Person person = new Person();
  2. person.setName("monday");
  3. Address address = new Address();
  4. address.setDetail("shanghai");
  5. person.setAddress(address);
  6. address.setPerson(person);
  7. session.save(person);
  8. session.save(address);

SQL schema

Sql代码  
  1. Hibernate:
  2. alter table tbl_person
  3. drop
  4. foreign key FKACCC46F65DCD05A8
  5. Hibernate:
  6. drop table if exists tbl_address
  7. Hibernate:
  8. drop table if exists tbl_person
  9. Hibernate:
  10. create table tbl_address (
  11. id integer not null auto_increment,
  12. detail varchar(255),
  13. primary key (id)
  14. )
  15. Hibernate:
  16. create table tbl_person (
  17. id integer not null auto_increment,
  18. name varchar(255),
  19. address_id integer unique,
  20. primary key (id)
  21. )
  22. Hibernate:
  23. alter table tbl_person
  24. add index FKACCC46F65DCD05A8 (address_id),
  25. add constraint FKACCC46F65DCD05A8
  26. foreign key (address_id)
  27. references tbl_address (id)
  28. Hibernate:
  29. insert
  30. into
  31. tbl_person
  32. (name, address_id)
  33. values
  34. (?, ?)
  35. Hibernate:
  36. insert
  37. into
  38. tbl_address
  39. (detail)
  40. values
  41. (?)
  42. Hibernate:
  43. update
  44. tbl_person
  45. set
  46. name=?,
  47. address_id=?
  48. where
  49. id=?

这里多了一条update语句,是因为插入顺序决定的。

若这样

Java代码  
  1. session.save(address);
  2. session.save(person);

就不会有update语句了。

Hibernate4一对一关系映射(唯一外键方式)相关推荐

  1. Hibernate_8_Person和IdCard实例_一对一关系:基于外键

    1)建立Person类: public class Person {private Integer id;private String name;private IdCard IdCard;publi ...

  2. Hibernate4一对一关系映射(共享主键方式)

    示例:一个人(person) 住一个地址(address),一个地址有一个人. Java代码   public class Person { private Integer id; private S ...

  3. Java程序员从笨鸟到菜鸟之(五十八)细谈Hibernate(九)hibernate一对一关系映射...

    一对一关系映射即为关系双方都含有对方一个引用,其实在生活中一对一关系也很常见,比如人和×××,学生和学号等,都是一对一的关系映射,一对一映射分为单向的和双向的,没种关系映射又可以分为主键关联映射,唯一 ...

  4. hibernate一对一主键唯一外键关联(二)

    1.新建工程项目hibernate_one2one_ufk_2,添加hibernate所需的Jar包和数据库驱动的Jar包. 2.编写工具类HibernatUtils.java和ExportDB.ja ...

  5. hibernate一对一主键唯一外键关联(一)

    1.新建工程项目hibernate_one2one_ufk_1,添加hibernate所需Jar包和数据库驱动Jar包. 2.编写工具类HibernateUtils.java和ExportDB.jav ...

  6. 问题记录:EntityFramework 一对一关系映射

    EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher {public int Id { get; set; }p ...

  7. hibernate one2one 唯一外键关联(双向关联)

    hibernate的一对一唯一外键关联映射(双向关联 Person <------->IdCard) 一对一唯一外键关联采用<one - to -one>标签映射,必须指定标签 ...

  8. hibernate中一对一关系映射

    这篇文章讲述的是hibernate中一对一关系映射,如有错误或者不当之处还望各位大神批评指正. 一对一映射(外键关联) 目标 假设一个人对应养一只狗,一只狗只能由一个人来养,完成一对一相关操作. 类编 ...

  9. Hibernate_9_Person和IdCard实例_一对一关系:基于主键

    1)建立Person类:(与8同样) 2)建立IdCard类:(与8同样) 3)建立持久化类:  1>保存方法(与8同样)  2>获取方法(与8同样)  3>删除方法(与8同样)   ...

最新文章

  1. Python数据结构——tuple
  2. php使用zeromq
  3. C#3.0扩展方法[转]
  4. 2016浙江省赛过山车记
  5. Leetcode 1094.拼车 差分
  6. dubbo 整合 zipkin,最简单的方式,亲测有效
  7. 5gh掌上云计算认证不通过_阿里云ACP认证考试攻略、考试心得、费用及常见问题...
  8. 【笔记】Java数据结构与算法
  9. 【SICP练习】71 练习2.42
  10. SqlParameter类中的两对好基友:SqlDbType与DbType、SqlValue与Value
  11. 陈绪:7月24日阿里云上海峰会出品人
  12. 基于SpringBoot 学生成绩管理系统的设计与实现
  13. 悉尼大学计算机专业新生,2020年悉尼大学计算机科学专业课程设置难不难
  14. kafka消息堆积及分区不均匀的解决方案
  15. CAN总线控制器配置说明
  16. Android入门第十四篇之画图
  17. 【JavaSE】图书馆系统制作--JavaSE简易知识整合
  18. yolov5训练常见错误解决办法
  19. pythonsuper继承规则,Python用super继承
  20. 如何彻底清除还原精灵

热门文章

  1. 【C 语言】文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )
  2. 【Android 逆向】Android 逆向通用工具开发 ( Android 逆向通用工具组成部分 | 各模块间的关联 )
  3. 【Flutter】Flutter 调试 ( 调试回退功能 | Debug 调试中查看变量的方式 | 控制台信息 )
  4. 【计算机网络】网络安全 : 计算机网络安全威胁 ( 四种网络攻击类型 | 主动攻击与被动攻击 | 分布式拒绝服务攻击 DDos | 恶意程序 | 计算机网络安全目标)
  5. 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
  6. 【Android FFMPEG 开发】OpenSLES 播放音频 ( 创建引擎 | 输出混音设置 | 配置输入输出 | 创建播放器 | 获取播放/队列接口 | 回调函数 | 开始播放 | 激活回调 )
  7. 那些做的“不够好”的父母,他们可能已经做到了自己的100分
  8. phpstudy composer 安装YII2
  9. maven中把依赖的JAR包一起打包(转)
  10. mysql远程连接 Host * is not allowed to connect to this MySQL server