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一对一关联------主键关联(亲测成功)相关推荐

  1. hibernate一对一主键关联映射(一)---单向关联

    1.新建工程项目hibernate_one2one_pk_1,添加hibernate所需Jar包和mysql驱动Jar包. 2.建立工具类HihernateUtils.java和ExportDB.ja ...

  2. hibernate一对一主键关联映射(二)---双向关联

    1.新建工程项目hibernate_one2one_pk_2,加入hibernate所需的Jar包和数据库mysql驱动Jar包. 2.编写工具类HibernateUtils.java和ExportD ...

  3. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联...

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  4. Spring Data JAP框架处理表关系的步骤(一对一主键关联

    Spring Data JAP框架处理表关系的步骤: 1)确定表和表之间的关系 2)对应表创建实体类 3)在实体类配置注解关联关系 4)测试 一对一表关系的实现方案(主键关联: 1 在Customer ...

  5. 主键能否@onetoone_双向@OneToOne主键关联

    主键能否@onetoone 现在该继续有关Hibernate的文章了. 最后一个致力于单向@OneToOne关联 . 因此,今天我将向您展示如何获取双向@OneTonOne主键关联 . 本教程中基于前 ...

  6. 双向@OneToOne主键关联

    现在该继续有关Hibernate的文章了. 最后一个致力于单向@OneToOne关联 . 因此,今天我将向您展示如何获取双向@OneTonOne主键关联 . 本教程中基于前一篇文章的示例. 让我们开始 ...

  7. hibernate one2one 唯一外键关联(双向关联)

    hibernate的一对一唯一外键关联映射(双向关联 Person <------->IdCard) 一对一唯一外键关联采用<one - to -one>标签映射,必须指定标签 ...

  8. One2One主键关联的实现

    主键关联,产生主键的是A类,与A相同主键的是B类 主键对应的A类,hbm.xml文件与.cs文件均无任何特别,与单表相同 与A相同的主键B类, Hbm.xml文件: <id name=" ...

  9. Hibernate标识符属性(主键)生成策略全析

    数据库中的主键能够唯一识别一条记录,它可以是一个字段也可以是多个字段的组合.主键的主要作用是标识表中的一条记录,还有和其他表中的数据进行关联.数据库中的主键类型必须符合唯一性约束和非空约束.作为附加属 ...

最新文章

  1. acwing yxc总结时间算法复杂度
  2. IOS面试_1.浅析内存管理
  3. linux通用中断子系统介绍
  4. GDCM:Torture的测试程序
  5. 如何垂直居中一个img
  6. c语言 程序延时 校准,c语言实现系统时间校正工具代码分享
  7. mysql 增删改数据 dml 1207 0310
  8. bzoj 1716 找零钱
  9. geoserver三维_集团公司自主研发三维GIS平台产品——GeniusWorld 2.0 C版本发布
  10. Vue学习笔记之07-v-for循环遍历
  11. Linux四剑客详解——grep
  12. 为什么 Laravel 会成为最成功的 PHP 框架?
  13. Atitit React的相关概念东东 attilax总结
  14. 2010 模板下载 罗斯文_学生个人简历模板,简历制作技巧
  15. teststand-介绍
  16. ANT下载和配置 IDEA
  17. 电脑有时突然黑屏,过一两秒就好了的问题解决
  18. 怎么提升工作能力?怎么制定计划?
  19. Toast的使用详解
  20. java.有空值的对象序列化_java – 如何防止Map中的空值和bean中的空字段通过Jackson序列化...

热门文章

  1. jeecms添加站点
  2. iOS 10 之后权限设置
  3. iOS屏幕尺寸和分辨率了解
  4. c++成员变量与构造函数
  5. 配置Maven环境变量-Eclipse/Idea添加Maven
  6. MacOS下IDEA设置智能提示不区分大小写
  7. Android 使用ViewPager实现导航页面
  8. exposed beyond app through Intent.getData(),或FileUriExposedException
  9. linux编译c++ 静态库,C/C++ 条件编译静态库
  10. mybatisPlus中的updateById无法更新null值的字段