Hibernate 一对一主键双向关联

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
Hibernate 一对一主键双向关联
 
一对一主键映射在一对一映射中还算是最为常用的。
 
一、模型
 
一个人Person 对应一个地址Address。
 
二、数据模型和对象模型图
 
 
导出建表SQL如下:
 
/*==============================================================*/ 
/* DBMS name:            MySQL 5.0                                                                        */ 
/* Created on:         2008-12-8 23:05:32                                                     */ 
/*==============================================================*/ 


drop  table  if  exists address; 

drop  table  if  exists person; 

/*==============================================================*/ 
/* Table: address                                                                                             */ 
/*==============================================================*/ 
create  table address 

     id                                      bigint  not  null comment  'ID'
     detail                              varchar(120)  not  null comment  '详细地址'
      primary  key (id) 

type = InnoDB; 

alter  table address comment  '地址'

/*==============================================================*/ 
/* Table: person                                                                                                */ 
/*==============================================================*/ 
create  table person 

     id                                      bigint  not  null auto_increment comment  'ID'
      name                                  varchar(24)  not  null comment  '姓名'
      primary  key (id) 

type = InnoDB; 

alter  table person comment  '人'

alter  table address  add  constraint FK_Reference_2  foreign  key (id) 
             references person (id)  on  delete  restrict  on  update  restrict;
 
三、对象模型代码
 
public  class Person  implements java.io.Serializable { 

   private Long id; 
   private String name; 
   private Address address;
 
public  class Address  implements java.io.Serializable { 
   private Long id; 
   private Person person; 
   private String detail;
 
四、映射代码
<? xml  version ="1.0"  encoding ="utf-8" ?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

< hibernate-mapping > 
   < class  name ="entity.Person"  table ="person" > 
     < id  name ="id"  type ="java.lang.Long" > 
       < column  name ="id"  /> 
       < generator  class ="identity"  /> 
     </ id > 
     < property  name ="name"  type ="java.lang.String" > 
       < column  name ="name"  length ="24"  not-null ="true" > 
         < comment >姓名 </ comment > 
       </ column > 
     </ property > 
    <!--  cascade="all":在保存person对象的时候,级联保存person对象关联的address对象    --> 
     < one-to-one  name ="address"  cascade ="all"  /> 
   </ class > 
</ hibernate-mapping >
 
<? xml  version ="1.0"  encoding ="utf-8" ?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

< hibernate-mapping > 
   < class  name ="entity.Address"  table ="address"  catalog ="mydb" > 
     < id  name ="id"  type ="java.lang.Long" > 
       < column  name ="id"  /> 
      <!--  class="foreign": 一对一主键映射中,使用另外一个相关联的对象的标识符 --> 
       < generator  class ="foreign" > 
         < param  name ="property" >person </ param > 
       </ generator > 
     </ id > 
     < property  name ="detail"  type ="java.lang.String" > 
       < column  name ="detail"  length ="120"  not-null ="true" > 
         < comment >详细地址 </ comment > 
       </ column > 
     </ property > 
    <!--  表示在address表存在一个外键约束,外键参考相关联的表person --> 
     < one-to-one  name ="person"  constrained ="true"  /> 
   </ class > 
</ hibernate-mapping >
 
五、Hibernate配置
<? xml  version ='1.0'  encoding ='UTF-8' ?> 
<!DOCTYPE hibernate-configuration PUBLIC 
                    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
                    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<!--  Generated by MyEclipse Hibernate Tools.                                     --> 
< hibernate-configuration > 

< session-factory > 
   < property  name ="connection.username" >root </ property > 
   < property  name ="connection.url" > 
    jdbc:mysql://localhost:3306/mydb 
   </ property > 
   < property  name ="dialect" > 
    org.hibernate.dialect.MySQLDialect 
   </ property > 
   < property  name ="connection.password" >xiaohui </ property > 
   < property  name ="connection.driver_class" > 
    com.mysql.jdbc.Driver 
   </ property > 
   < property  name ="show_sql" >true </ property > 
   < property  name ="format_sql" >true </ property > 
   < mapping  resource ="entity/Person.hbm.xml"  /> 
   < mapping  resource ="entity/Address.hbm.xml"  /> 

</ session-factory > 

</ hibernate-configuration >
 
测试很简单就不写了。
 

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/39333,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
SQL Java 数据库连接
Hibernate -双向一对一关联关系映射
Hibernate -双向一对一关联关系映射
55 0
|
XML 存储 Java
Hibernate框架【三】——基本映射——一对一映射
Hibernate框架【三】——基本映射——一对一映射
82 0
|
XML Java 数据库连接
《Hibernate上课笔记》-----class5----Hibernate实现一对一关联映射
《Hibernate上课笔记》-----class5----Hibernate实现一对一关联映射
68 0
《Hibernate上课笔记》-----class5----Hibernate实现一对一关联映射
|
SQL Java 数据库连接
【SSH快速进阶】——Hibernate一对一映射(one-to-one)——唯一外键关联
  接着上篇文章,唯一外键关联,就是给一对一关联关系中某个对象加一个外键。比如这里给t_person表添加一个外键,指向t_idcard的主键,并且规定t_person中的外键idCard唯一,也可以达到一对一映射的效果。
【SSH快速进阶】——Hibernate一对一映射(one-to-one)——唯一外键关联
|
SQL Java 数据库连接
【SSH快速进阶】——Hibernate一对一映射(one-to-one)——主键关联映射
 现实生活中,有很多场景需要用到一对一映射,比如每个学生只有一个学生证,每个公民只有一张身份证等。这里用公民-身份证来举例说明。
【SSH快速进阶】——Hibernate一对一映射(one-to-one)——主键关联映射
|
SQL Java 数据库连接
Hibernate的一对一映射(八)
Hibernate的一对一映射(八)
114 0
Hibernate的一对一映射(八)
|
SQL NoSQL Java
hibernate(五) hibernate一对一关系映射详解
之前讲解了一对多(单向、双向)、多对多(双向),今天就讲解一下最后一个关系,一对一。 心情不错。状态也挺好的,赶紧写一篇博文造福一下大家把。  
287 0
|
Java 数据库连接
Hibernate一对一、一对多、多对多注解映射配置
一对一:   一对多:   多对多: 作者: Candyメ奶糖 出处:http://www.cnblogs.com/Candies/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
894 0
|
SQL Java 数据库连接
hibernate笔记--基于外键的单(双)向的一对一映射关系
  假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射关系,只需要在单向多对一的映射关系的多的一端的配置文件的标签中添加一个unique="true"...
870 0
|
Java 数据库连接
hibernate笔记--基于主键的单(双)向的一对一映射关系
  上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这个外键列,而与idCard表共用一个主键,或者说是其外键为主键的表结构,这种基于主键的双向一对一...
909 0