博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate一对一关联------主键关联(亲测成功)
阅读量:5126 次
发布时间:2019-06-13

本文共 5337 字,大约阅读时间需要 17 分钟。

 

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 
2 5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 
2 5
6
7
8
9
company10
11
12
13
14
15
16
17
18
19
20
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

你可能感兴趣的文章
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
HTML元素定义 ID,Class,Style的优先级
查看>>