hibernate中一对一关系映射
这篇文章讲述的是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中一对一关系映射相关推荐
- Java程序员从笨鸟到菜鸟之(五十八)细谈Hibernate(九)hibernate一对一关系映射...
一对一关系映射即为关系双方都含有对方一个引用,其实在生活中一对一关系也很常见,比如人和×××,学生和学号等,都是一对一的关系映射,一对一映射分为单向的和双向的,没种关系映射又可以分为主键关联映射,唯一 ...
- 问题记录:EntityFramework 一对一关系映射
EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher {public int Id { get; set; }p ...
- Hibernate 一对一关系映射总结篇
在Hibernate 关系映射中一对一是比较常见也常用的一种,一对一的关系映射类型中又可分为:一对一外键单向映射.一对一外键双向映射.一对一主键单向映射和一对一主键双向映射. 下面就简单的说下自己对这 ...
- Mybatis中的关系映射(一对一,一对多,多对多)
在网上寻了很久,大多数讲关系性的文章都是大篇幅的去将表照搬上来,本来就很生硬,此文就不在讲述关系性映射的具体实现,转而从浅层来讲讲其概念性. 1.1 关联关系概述 在关系型数据库中,多表之间存在着三种 ...
- ef多条件映射_Hibernate一对一关系映射
1.需求:新增一个用户时,同时增加身份证信息. 2.数据库设计: 3.说明:以上是基于外键的映射关系,将用户表主键 user_id作为身份证表的外键字段关联起来,作为单独的外键列,保存在数据库中,类似 ...
- Hibernate之对象关系映射文件
一.对象关系映射文件 POJO类和关系数据库之间的映射可以用一个XML文档来定义 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 映射文件的拓展名为 .hbm.xml 1.映射文件说 ...
- Java程序员从笨鸟到菜鸟之(五十七)细谈Hibernate(八)Hibernate集合Map关系映射
对于hibernate中,集合属性在Hibernate的映射文件中是非常常见的,也是非常重要的内容,理解和熟练掌握常用的集合属性则显得更为重要.在hibernate的配置文件 ...
- 170905-MyBatis中的关系映射
===关系映射=== 参考文档复习:1对1,1对多,多对多 1.映射(多)对一.(一)对一的关联关系 1).使用列的别名 ①.若不关联数据表,则可以得到关联对象的id属性 ②.若还希望得到关联对象的其 ...
- Hibernate的多种关系映射(oto、otm、mtm)
前提:使用注解映射 一.一对一(夫妻关系表) 两个表:hus1和wife1表,外键为id,各自有名字hname和wname 映射得到两个类:Hus1和Wife1类 Hus1类(主表): package ...
最新文章
- 差分约束问题 ---- 2019ccpc哈尔滨A. Artful Paintings[二分+差分约束+建图剪枝]
- java双重检查锁单例真的线程安全吗?
- nodejs之http-proxy几点常见问题
- ROS探索总结(二)——ROS总体框架
- 简约自适应APP下载页简单源码
- 项目管理工具project软件学习(一) - 项目信息设置
- flask-sqlalchemy Models
- bzoj 1069: [SCOI2007]最大土地面积(旋转卡壳)
- allavsoft mac版:支持从各种视频分享网站下载视频
- 382.链表随机节点
- 面试官问如何优化慢 SQL ?(附两万字SQL面试题)
- 腾讯云HiFlow场景连接器7月最受欢迎新应用模版推荐
- [算法]LeetCode 专题 -- 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置
- 无穷小陪伴老翁走人生
- 实战一:爬取拉勾网职位信息
- 安装 配置 Nginx
- DevEco Studio使用技巧
- 全能pdf转换器注册码
- 10款数据恢复软件测评对比
- 终于,狂神说SSM及SpringBoot系列文章完更!!!