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一对一关联------主键关联(亲测成功)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaWeb网上购物系统项目源码+论文
- 下一篇: 信捷PLC应用-三轴钻孔机