Hibernate一对一关联------主键关联(亲测成功)
1、创建两个实体(Company.java和Login.java)代码如下:
1 package wck.stu.vo.onetoonein; 2 3 public class Company { 4 private String id = ""; 5 6 private String companyName = ""; 7 8 private String linkman = ""; 9 10 private String telephone = ""; 11 12 private String email = ""; 13 14 private Login login; 15 16 public String getId() { 17 return id; 18 } 19 20 public void setId(String id) { 21 this.id = id; 22 } 23 24 public String getCompanyName() { 25 return companyName; 26 } 27 28 public void setCompanyName(String companyName) { 29 this.companyName = companyName; 30 } 31 32 public String getLinkman() { 33 return linkman; 34 } 35 36 public void setLinkman(String linkman) { 37 this.linkman = linkman; 38 } 39 40 public String getTelephone() { 41 return telephone; 42 } 43 44 public void setTelephone(String telephone) { 45 this.telephone = telephone; 46 } 47 48 public String getEmail() { 49 return email; 50 } 51 52 public void setEmail(String email) { 53 this.email = email; 54 } 55 56 public Login getLogin() { 57 return login; 58 } 59 60 public void setLogin(Login login) { 61 this.login = login; 62 } 63 }
Company.java
1 package wck.stu.vo.onetoonein; 2 3 public class Login { 4 private String id = ""; 5 6 private String loginName = ""; 7 8 private String loginPwd = ""; 9 10 private Company company; 11 12 public String getId() { 13 return id; 14 } 15 16 public void setId(String id) { 17 this.id = id; 18 } 19 20 public String getLoginName() { 21 return loginName; 22 } 23 24 public void setLoginName(String loginName) { 25 this.loginName = loginName; 26 } 27 28 public String getLoginPwd() { 29 return loginPwd; 30 } 31 32 public void setLoginPwd(String loginPwd) { 33 this.loginPwd = loginPwd; 34 } 35 36 public Company getCompany() { 37 return company; 38 } 39 40 public void setCompany(Company company) { 41 this.company = company; 42 } 43 }
Login.java
2、创建配置文件(Company.hbm.xml和Login.hbm.xml)代码如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 <class name="wck.stu.vo.onetoonein.Company" table="COMPANY"> 7 <id name="id" type="java.lang.String"> 8 <column name="C_ID" length="32" not-null="true"></column> 9 <generator class="uuid.hex"></generator> 10 </id> 11 <property name="companyName" type="java.lang.String"> 12 <column name="C_COMPANYNAME" length="17"></column> 13 </property> 14 <property name="linkman" type="java.lang.String"> 15 <column name="C_LIKEMAN" length="17"></column> 16 </property> 17 <property name="telephone" type="java.lang.String"> 18 <column name="C_TELEPHONE" length="17"></column> 19 </property> 20 <property name="email" type="java.lang.String"> 21 <column name="C_EMAIL" length="170"></column> 22 </property> 23 <one-to-one name="login" class="wck.stu.vo.onetoonein.Login" cascade="all" fetch="join" outer-join="true" lazy="false"/> 24 </class> 25 </hibernate-mapping>
Company.hbm.xml
注:<class>元素的lazy属性设定为true,表示延迟加载,如果lazy的值设置为false,则表示立即加载,下面对立即加载和延迟加载这两种概念进行说明。
(1)立即加载:表示Hibernate在从数据库中取得数据组装好一个对象(比如会员1)后,会立即再从数据库取得数据组装此对象所关联的对象(例如,登录帐号1)。
(2)延迟加载:表示Hibernate在从数据库中取得数据组装好一个对象(比如会员1)后,不会立即再从数据库取得数据组装此对象所关联的对象(例如,登录帐号1),而是等到需要时,才会从数据库取得数据组装此关联对象。
<one-to-one>元素的cascade属性标码操作是否 从父对象级联到被关联的对象all:所有情况下均进行级联操作,即包括save-update和delete操作。
<one-to-one>元素的fetch属性的可选值是join和select,默认值是select。当fetch属性设定为join时,表示链接抓取(Join Fetching):Hibernate通过在select语句中使用Outerjoin(外连接)来获得对象的关联实例或者关联集合。当fecth属性设定为select时,表示查询抓取(Select Fetching):需要另外发送一条select语句抓取当前对象的关联实体或集合。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 <class name="wck.stu.vo.onetoonein.Login" table="LOGIN"> 7 <id name="id" type="java.lang.String" column="C_ID"> 8 <generator class="foreign"> 9 <param name="property">company</param> 10 </generator> 11 </id> 12 <property name="loginName" type="java.lang.String"> 13 <column name="C_LOGINNAME" length="17"></column> 14 </property> 15 <property name="loginPwd" type="java.lang.String"> 16 <column name="C_LOGINPWD" length="17"></column> 17 </property> 18 <one-to-one name="company" class="wck.stu.vo.onetoonein.Company" constrained="true"/> 19 </class> 20 </hibernate-mapping>
Login.hbm.xml
注:Login.hbm.xml的主键id使用的外键生成机制(foreign),引用表company的主键作为login表的主键值,company在该映射文件的<one-to-one>元素的属性constrained="true"表示Login引用了company的主键作为外键。
3、测试代码
1 public String saveInfo() { 2 Company company = new Company(); 3 Login login = new Login(); 4 login.setLoginName("QQ"); 5 login.setLoginPwd("123"); 6 company.setCompanyName("清华大学出版社"); 7 company.setLinkman("白立军"); 8 company.setTelephone("010-60772015"); 9 company.setEmail("bailj@163.com"); 10 //PO对象之间相互设置关联关系 11 login.setCompany(company); 12 company.setLogin(login); 13 return onettooneDaoImpl.saveInfo(company); 14 }
实现多个表之间的主键一对一关系的时候只需要在主表(例如:Company.hbm.xml)中加入
<one-to-one name="login1" class="wck.stu.vo.onetoonein.Login1" cascade="all" fetch="join" outer-join="true" lazy="false"/>
其它一样,在保存的时候一定记得需要相互赋值例如:
1 public String saveInfo() { 2 Company company = new Company(); 3 Login login = new Login(); 4 login.setLoginName("QQ"); 5 login.setLoginPwd("123"); 6 Login1 login1 = new Login1(); 7 login1.setLoginName("QQ"); 8 login1.setLoginPwd("123"); 9 company.setCompanyName("清华大学出版社"); 10 company.setLinkman("白立军"); 11 company.setTelephone("010-60772015"); 12 company.setEmail("bailj@163.com"); 13 //PO对象之间相互设置关联关,注意这如果是多个表都需要相互赋值 14 login.setCompany(company); 15 login1.setCompany(company); 16 company.setLogin(login); 17 company.setLogin1(login1); 18 return onettooneDaoImpl.saveInfo(company); 19 }
转载于:https://www.cnblogs.com/wck1988/p/3486934.html
Hibernate一对一关联------主键关联(亲测成功)相关推荐
- hibernate一对一主键关联映射(一)---单向关联
1.新建工程项目hibernate_one2one_pk_1,添加hibernate所需Jar包和mysql驱动Jar包. 2.建立工具类HihernateUtils.java和ExportDB.ja ...
- hibernate一对一主键关联映射(二)---双向关联
1.新建工程项目hibernate_one2one_pk_2,加入hibernate所需的Jar包和数据库mysql驱动Jar包. 2.编写工具类HibernateUtils.java和ExportD ...
- Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联...
2018-11-10 22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...
- Spring Data JAP框架处理表关系的步骤(一对一主键关联
Spring Data JAP框架处理表关系的步骤: 1)确定表和表之间的关系 2)对应表创建实体类 3)在实体类配置注解关联关系 4)测试 一对一表关系的实现方案(主键关联: 1 在Customer ...
- 主键能否@onetoone_双向@OneToOne主键关联
主键能否@onetoone 现在该继续有关Hibernate的文章了. 最后一个致力于单向@OneToOne关联 . 因此,今天我将向您展示如何获取双向@OneTonOne主键关联 . 本教程中基于前 ...
- 双向@OneToOne主键关联
现在该继续有关Hibernate的文章了. 最后一个致力于单向@OneToOne关联 . 因此,今天我将向您展示如何获取双向@OneTonOne主键关联 . 本教程中基于前一篇文章的示例. 让我们开始 ...
- hibernate one2one 唯一外键关联(双向关联)
hibernate的一对一唯一外键关联映射(双向关联 Person <------->IdCard) 一对一唯一外键关联采用<one - to -one>标签映射,必须指定标签 ...
- One2One主键关联的实现
主键关联,产生主键的是A类,与A相同主键的是B类 主键对应的A类,hbm.xml文件与.cs文件均无任何特别,与单表相同 与A相同的主键B类, Hbm.xml文件: <id name=" ...
- Hibernate标识符属性(主键)生成策略全析
数据库中的主键能够唯一识别一条记录,它可以是一个字段也可以是多个字段的组合.主键的主要作用是标识表中的一条记录,还有和其他表中的数据进行关联.数据库中的主键类型必须符合唯一性约束和非空约束.作为附加属 ...
最新文章
- acwing yxc总结时间算法复杂度
- IOS面试_1.浅析内存管理
- linux通用中断子系统介绍
- GDCM:Torture的测试程序
- 如何垂直居中一个img
- c语言 程序延时 校准,c语言实现系统时间校正工具代码分享
- mysql 增删改数据 dml 1207 0310
- bzoj 1716 找零钱
- geoserver三维_集团公司自主研发三维GIS平台产品——GeniusWorld 2.0 C版本发布
- Vue学习笔记之07-v-for循环遍历
- Linux四剑客详解——grep
- 为什么 Laravel 会成为最成功的 PHP 框架?
- Atitit React的相关概念东东 attilax总结
- 2010 模板下载 罗斯文_学生个人简历模板,简历制作技巧
- teststand-介绍
- ANT下载和配置 IDEA
- 电脑有时突然黑屏,过一两秒就好了的问题解决
- 怎么提升工作能力?怎么制定计划?
- Toast的使用详解
- java.有空值的对象序列化_java – 如何防止Map中的空值和bean中的空字段通过Jackson序列化...
热门文章
- jeecms添加站点
- iOS 10 之后权限设置
- iOS屏幕尺寸和分辨率了解
- c++成员变量与构造函数
- 配置Maven环境变量-Eclipse/Idea添加Maven
- MacOS下IDEA设置智能提示不区分大小写
- Android 使用ViewPager实现导航页面
- exposed beyond app through Intent.getData(),或FileUriExposedException
- linux编译c++ 静态库,C/C++ 条件编译静态库
- mybatisPlus中的updateById无法更新null值的字段