Hibernate4一对一关系映射(唯一外键方式)
示例:一个人(person) 住一个地址(address),一个地址有一个人。
- public class Person {
- private Integer id;
- private String name;
- private Address address;
- //getter and setter
- }
- public class Address {
- private Integer id;
- private String detail;
- private Person person;
- //getter and setter
- }
用XML映射
- <hibernate-mapping package="org.monday.hibernate4.domain">
- <class name="Person" table="tbl_person">
- <id name="id">
- <generator class="identity" />
- </id>
- <property name="name" />
- <many-to-one name="address" class="Address" column="address_id" unique="true"/>
- </class>
- </hibernate-mapping>
- <hibernate-mapping package="org.monday.hibernate4.domain">
- <class name="Address" table="tbl_address">
- <id name="id">
- <generator class="identity"/>
- </id>
- <property name="detail" />
- <one-to-one name="person" class="Person" property-ref="address" />
- </class>
- </hibernate-mapping>
1、 tbl_address 表中使用外键来完成一对一关联,限制多方最多只能有一条记录参考到一方,
这是多对一的一个特列。所以设置 <many-to-one> 的 unique 的属性为 true 。
2、 <one-to-one> 的 property-ref 属性 指定引用关联类的属性。
用@Annotation映射
- @Entity
- @Table(name = "tbl_person")
- public class Person {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Integer id;
- private String name;
- @OneToOne
- @JoinColumn(name = "address_id", unique = true)
- private Address address;
- // getter and setter
- }
- @Entity
- @Table(name = "tbl_address")
- public class Address {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Integer id;
- private String detail;
- @OneToOne(mappedBy = "address")
- private Person person;
- // getter and setter
- }
测试代码
- Person person = new Person();
- person.setName("monday");
- Address address = new Address();
- address.setDetail("shanghai");
- person.setAddress(address);
- address.setPerson(person);
- session.save(person);
- session.save(address);
SQL schema
- Hibernate:
- alter table tbl_person
- drop
- foreign key FKACCC46F65DCD05A8
- Hibernate:
- drop table if exists tbl_address
- Hibernate:
- drop table if exists tbl_person
- Hibernate:
- create table tbl_address (
- id integer not null auto_increment,
- detail varchar(255),
- primary key (id)
- )
- Hibernate:
- create table tbl_person (
- id integer not null auto_increment,
- name varchar(255),
- address_id integer unique,
- primary key (id)
- )
- Hibernate:
- alter table tbl_person
- add index FKACCC46F65DCD05A8 (address_id),
- add constraint FKACCC46F65DCD05A8
- foreign key (address_id)
- references tbl_address (id)
- Hibernate:
- insert
- into
- tbl_person
- (name, address_id)
- values
- (?, ?)
- Hibernate:
- insert
- into
- tbl_address
- (detail)
- values
- (?)
- Hibernate:
- update
- tbl_person
- set
- name=?,
- address_id=?
- where
- id=?
这里多了一条update语句,是因为插入顺序决定的。
若这样
- session.save(address);
- session.save(person);
就不会有update语句了。
Hibernate4一对一关系映射(唯一外键方式)相关推荐
- Hibernate_8_Person和IdCard实例_一对一关系:基于外键
1)建立Person类: public class Person {private Integer id;private String name;private IdCard IdCard;publi ...
- Hibernate4一对一关系映射(共享主键方式)
示例:一个人(person) 住一个地址(address),一个地址有一个人. Java代码 public class Person { private Integer id; private S ...
- Java程序员从笨鸟到菜鸟之(五十八)细谈Hibernate(九)hibernate一对一关系映射...
一对一关系映射即为关系双方都含有对方一个引用,其实在生活中一对一关系也很常见,比如人和×××,学生和学号等,都是一对一的关系映射,一对一映射分为单向的和双向的,没种关系映射又可以分为主键关联映射,唯一 ...
- hibernate一对一主键唯一外键关联(二)
1.新建工程项目hibernate_one2one_ufk_2,添加hibernate所需的Jar包和数据库驱动的Jar包. 2.编写工具类HibernatUtils.java和ExportDB.ja ...
- hibernate一对一主键唯一外键关联(一)
1.新建工程项目hibernate_one2one_ufk_1,添加hibernate所需Jar包和数据库驱动Jar包. 2.编写工具类HibernateUtils.java和ExportDB.jav ...
- 问题记录:EntityFramework 一对一关系映射
EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher {public int Id { get; set; }p ...
- hibernate one2one 唯一外键关联(双向关联)
hibernate的一对一唯一外键关联映射(双向关联 Person <------->IdCard) 一对一唯一外键关联采用<one - to -one>标签映射,必须指定标签 ...
- hibernate中一对一关系映射
这篇文章讲述的是hibernate中一对一关系映射,如有错误或者不当之处还望各位大神批评指正. 一对一映射(外键关联) 目标 假设一个人对应养一只狗,一只狗只能由一个人来养,完成一对一相关操作. 类编 ...
- Hibernate_9_Person和IdCard实例_一对一关系:基于主键
1)建立Person类:(与8同样) 2)建立IdCard类:(与8同样) 3)建立持久化类: 1>保存方法(与8同样) 2>获取方法(与8同样) 3>删除方法(与8同样) ...
最新文章
- Python数据结构——tuple
- php使用zeromq
- C#3.0扩展方法[转]
- 2016浙江省赛过山车记
- Leetcode 1094.拼车 差分
- dubbo 整合 zipkin,最简单的方式,亲测有效
- 5gh掌上云计算认证不通过_阿里云ACP认证考试攻略、考试心得、费用及常见问题...
- 【笔记】Java数据结构与算法
- 【SICP练习】71 练习2.42
- SqlParameter类中的两对好基友:SqlDbType与DbType、SqlValue与Value
- 陈绪:7月24日阿里云上海峰会出品人
- 基于SpringBoot 学生成绩管理系统的设计与实现
- 悉尼大学计算机专业新生,2020年悉尼大学计算机科学专业课程设置难不难
- kafka消息堆积及分区不均匀的解决方案
- CAN总线控制器配置说明
- Android入门第十四篇之画图
- 【JavaSE】图书馆系统制作--JavaSE简易知识整合
- yolov5训练常见错误解决办法
- pythonsuper继承规则,Python用super继承
- 如何彻底清除还原精灵
热门文章
- 【C 语言】文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )
- 【Android 逆向】Android 逆向通用工具开发 ( Android 逆向通用工具组成部分 | 各模块间的关联 )
- 【Flutter】Flutter 调试 ( 调试回退功能 | Debug 调试中查看变量的方式 | 控制台信息 )
- 【计算机网络】网络安全 : 计算机网络安全威胁 ( 四种网络攻击类型 | 主动攻击与被动攻击 | 分布式拒绝服务攻击 DDos | 恶意程序 | 计算机网络安全目标)
- 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
- 【Android FFMPEG 开发】OpenSLES 播放音频 ( 创建引擎 | 输出混音设置 | 配置输入输出 | 创建播放器 | 获取播放/队列接口 | 回调函数 | 开始播放 | 激活回调 )
- 那些做的“不够好”的父母,他们可能已经做到了自己的100分
- phpstudy composer 安装YII2
- maven中把依赖的JAR包一起打包(转)
- mysql远程连接 Host * is not allowed to connect to this MySQL server