这篇文章讲述的是hibernate中一对一关系映射,如有错误或者不当之处还望各位大神批评指正。

一对一映射(外键关联)

目标

假设一个人对应养一只狗,一只狗只能由一个人来养,完成一对一相关操作。

类编写

1.Person类:

public class Person {private Integer id  ;private String name ;private char sex ;private int age ;private Dog dog ;
//省略get和set方法
}

2.Dog类:

public class Dog {private Integer id ;private String name ;private int age ;private Person person ;
//省略get和set方法
}

映射文件

1.Person.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-6-20 15:53:16 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping package="com.cn.cmc.model"><class name="Person" table="PERSON"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="sequence" /></id><property name="name" type="java.lang.String"><column name="NAME" /></property><property name="sex" type="char"><column name="SEX" /></property><property name="age" type="int"><column name="AGE" /></property><many-to-one name="dog" cascade="all" class="com.cn.cmc.model.Dog" column="DOG_ID" unique="true"></many-to-one></class>
</hibernate-mapping>

2.Dog.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-6-20 15:53:16 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping><class name="com.cn.cmc.model.Dog" table="DOG"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="sequence" /></id><property name="name" type="java.lang.String"><column name="NAME" /></property><property name="age" type="int"><column name="AGE" /></property>/*property-ref 设置外键关联*/      <one-to-one name="person" cascade="all" property-ref="dog" class="com.cn.cmc.model.Person"></one-to-one></class>
</hibernate-mapping>

添加操作

Person person = new Person() ;person.setName("cmc");person.setAge(22);person.setSex('M');Dog dog = new Dog() ;dog.setName("tom");dog.setAge(2);dog.setPerson(person);person.setDog(dog);
//要先保存dog,生成id后才能保存person中的外键列,否则多出来update语句session.save(dog) ;session.save(person) ;

查询操作

仅查询人的时候(有外键的一方)

//仅查询person时不进行查询dog操作,二是懒加载
Person person = (Person) session.get(Person.class,84 ) ;
System.out.println(person.getName());//使用关于外键对象时,才执行查询dog操作
Dog dog = person.getDog() ;
System.out.println(dog.getName());

查询狗的时候(无外键的一方时)

Dog dog = (Dog) session.get(Dog.class, 86) ;
System.out.println(dog.getName());Person person = dog.getPerson() ;
System.out.println(person.getName());

注:在dog.hbm.xml中若不配置属性 property-ref=”dog” 则使用person主键进行连表,若配置,则使用person中的dog外键进行连接

更新操作

Dog dog = (Dog) session.get(Dog.class, 85) ;
dog.setName("wow")
session.update(dog);

删除操作

Dog dog = (Dog) session.get(Dog.class, 85) ;
session.delete(dog);

另一种一对一映射方法(主键关联)

*.hbm.xml文件配置

Person.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-6-20 15:53:16 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping package="com.cn.cmc.model"><class name="Person" table="PERSON"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="sequence" /></id><property name="name" type="java.lang.String"><column name="NAME" /></property><property name="sex" type="char"><column name="SEX" /></property><property name="age" type="int"><column name="AGE" /></property><one-to-one name="dog" class="com.cn.cmc.model.Dog"></one-to-one></class>
</hibernate-mapping>

Dog.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-6-20 15:53:16 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping><class name="com.cn.cmc.model.Dog" table="DOG"><id name="id" type="java.lang.Integer"><column name="ID" /><!-- 外键生成方式产生主键 --><generator class="foreign"><!-- 使用哪个属性的主键作为外键 --><param name="property">person</param></generator></id><property name="name" type="java.lang.String"><column name="NAME" /></property><property name="age" type="int"><column name="AGE" /></property>
--constrained="true" 以使当前的主键上添加外键约束<one-to-one name="person" constrained="true" class="com.cn.cmc.model.Person"></one-to-one></class>
</hibernate-mapping>

添加操作
注:同第一种且不存在顺序的问题
查询操作
注:同第一种操作
更新操作
注:同第一种操作
删除操作
注:同第一种操作

hibernate中一对一关系映射相关推荐

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

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

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

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

  3. Hibernate 一对一关系映射总结篇

    在Hibernate 关系映射中一对一是比较常见也常用的一种,一对一的关系映射类型中又可分为:一对一外键单向映射.一对一外键双向映射.一对一主键单向映射和一对一主键双向映射. 下面就简单的说下自己对这 ...

  4. Mybatis中的关系映射(一对一,一对多,多对多)

    在网上寻了很久,大多数讲关系性的文章都是大篇幅的去将表照搬上来,本来就很生硬,此文就不在讲述关系性映射的具体实现,转而从浅层来讲讲其概念性. 1.1 关联关系概述 在关系型数据库中,多表之间存在着三种 ...

  5. ef多条件映射_Hibernate一对一关系映射

    1.需求:新增一个用户时,同时增加身份证信息. 2.数据库设计: 3.说明:以上是基于外键的映射关系,将用户表主键 user_id作为身份证表的外键字段关联起来,作为单独的外键列,保存在数据库中,类似 ...

  6. Hibernate之对象关系映射文件

    一.对象关系映射文件 POJO类和关系数据库之间的映射可以用一个XML文档来定义 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 映射文件的拓展名为 .hbm.xml 1.映射文件说 ...

  7. Java程序员从笨鸟到菜鸟之(五十七)细谈Hibernate(八)Hibernate集合Map关系映射

                 对于hibernate中,集合属性在Hibernate的映射文件中是非常常见的,也是非常重要的内容,理解和熟练掌握常用的集合属性则显得更为重要.在hibernate的配置文件 ...

  8. 170905-MyBatis中的关系映射

    ===关系映射=== 参考文档复习:1对1,1对多,多对多 1.映射(多)对一.(一)对一的关联关系 1).使用列的别名 ①.若不关联数据表,则可以得到关联对象的id属性 ②.若还希望得到关联对象的其 ...

  9. Hibernate的多种关系映射(oto、otm、mtm)

    前提:使用注解映射 一.一对一(夫妻关系表) 两个表:hus1和wife1表,外键为id,各自有名字hname和wname 映射得到两个类:Hus1和Wife1类 Hus1类(主表): package ...

最新文章

  1. 差分约束问题 ---- 2019ccpc哈尔滨A. Artful Paintings[二分+差分约束+建图剪枝]
  2. java双重检查锁单例真的线程安全吗?
  3. nodejs之http-proxy几点常见问题
  4. ROS探索总结(二)——ROS总体框架
  5. 简约自适应APP下载页简单源码
  6. 项目管理工具project软件学习(一) - 项目信息设置
  7. flask-sqlalchemy Models
  8. bzoj 1069: [SCOI2007]最大土地面积(旋转卡壳)
  9. allavsoft mac版:支持从各种视频分享网站下载视频
  10. 382.链表随机节点
  11. 面试官问如何优化慢 SQL ?(附两万字SQL面试题)
  12. 腾讯云HiFlow场景连接器7月最受欢迎新应用模版推荐
  13. [算法]LeetCode 专题 -- 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置
  14. 无穷小陪伴老翁走人生
  15. 实战一:爬取拉勾网职位信息
  16. 安装 配置 Nginx
  17. DevEco Studio使用技巧
  18. 全能pdf转换器注册码
  19. 10款数据恢复软件测评对比
  20. 终于,狂神说SSM及SpringBoot系列文章完更!!!

热门文章

  1. 首批 5G 网络就位之后,下一步在何方?
  2. 基本的信号——三角脉冲信号(非周期锯齿波信号)
  3. 【蓝桥杯】星系炸弹 - Java版解析
  4. hnu实验七字符串10. 小希练打字
  5. 【声明】RUC自习助手APP(Android版)已上线,可下载
  6. CSDN 博客,我来了
  7. 企业微信如何订会议室?预定流程是怎么的?
  8. 蓝蓝算法二期工程day3,一万年太久,只争朝夕
  9. Active Directory 与域
  10. linux内核加载根文件系统,根文件系统 - Linux 内核引导选项简介