国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Hibernate 組合映射使用

hibernate知識復習二:組合映射

      假設現(xiàn)在有這樣的需求,一個數(shù)據(jù)表的字段需要包括用戶的兩個地址,其中一個是家庭地址(Address),包括所在城  市,街道和郵政編碼,另一個是辦公地址(Mailing Address),也包括同樣結(jié)構(gòu)的字段,包括城市,街道和郵政編碼,在這種情況下,可以使得組合映射的方式來完成對象關系映射關系。

     首先定義數(shù)據(jù)表:

Java代碼
  1. create table PERSON   
  2. (   
  3.   ID      NUMBER not null,   
  4.   NAME    VARCHAR2(20),   
  5.   CITY    VARCHAR2(50),   
  6.   STREET  VARCHAR2(50),   
  7.   ZIPCODE VARCHAR2(6)   
  8. );   
  9. alter table PERSON   
  10.   add constraint PK_PERSON_ID primary key (ID);  

 

對于這種需求,我們可能有必要把其中的city,street,zipcode提取出來單獨組成一個Address類,將這個類作為Person對象的一個組成部分出現(xiàn)。

源代碼:Address.java

Java代碼
  1. package com.sun.demo;   
  2.   
  3. public class Address {   
  4.   
  5.     private String city;   
  6.   
  7.     private String street;   
  8.   
  9.     private String zipcode;   
  10.        
  11.     public Address() {   
  12.     }   
  13.   
  14.     public Address(String city, String street, String zipcode) {   
  15.         this.city = city;   
  16.         this.street = street;   
  17.         this.zipcode = zipcode;   
  18.     }   
  19.   
  20.     public String getCity() {   
  21.         return city;   
  22.     }   
  23.   
  24.     public void setCity(String city) {   
  25.         this.city = city;   
  26.     }   
  27.   
  28.     public String getStreet() {   
  29.         return street;   
  30.     }   
  31.   
  32.     public void setStreet(String street) {   
  33.         this.street = street;   
  34.     }   
  35.   
  36.     public String getZipcode() {   
  37.         return zipcode;   
  38.     }   
  39.   
  40.     public void setZipcode(String zipcode) {   
  41.         this.zipcode = zipcode;   
  42.     }   
  43.        
  44.     public String toString() {   
  45.         return city + " " + street + " " + zipcode;   
  46.     }   
  47.   
  48. }  

 對象類Person.java定義如下:注意其中將Address作為Person類的屬性出現(xiàn)。

源代碼:Person.java

Java代碼
  1. package com.sun.demo;   
  2.   
  3. public class Person implements java.io.Serializable {   
  4.   
  5.     private Long id;   
  6.   
  7.     private String name;   
  8.   
  9.     private Address address;   
  10.   
  11.     public Person(Long id, String name, Address address) {   
  12.         this.id = id;   
  13.         this.name = name;   
  14.         this.address = address;   
  15.     }   
  16.   
  17.     public Address getAddress() {   
  18.         return address;   
  19.     }   
  20.   
  21.     public void setAddress(Address address) {   
  22.         this.address = address;   
  23.     }   
  24.   
  25.     public Person() {   
  26.     }   
  27.   
  28.     public Person(Long id) {   
  29.         this.id = id;   
  30.     }   
  31.   
  32.     public Long getId() {   
  33.         return this.id;   
  34.     }   
  35.   
  36.     public void setId(Long id) {   
  37.         this.id = id;   
  38.     }   
  39.   
  40.     public String getName() {   
  41.         return this.name;   
  42.     }   
  43.   
  44.     public void setName(String name) {   
  45.         this.name = name;   
  46.     }   
  47. }  

 

上面這種POJO對象的設計,對數(shù)據(jù)庫的表結(jié)構(gòu)并沒有任何影響,只是出于程序設計的考慮,增加對象設計的粒度,可以通過Address的設計作為Person對象的一個組件(Component),在映射文件中,我們可以使用<component>標簽來完成此種關系的映射。

映射關系文件Person.hbm.xml如下:

源文件:Person.hbm.xml

Xml代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <hibernate-mapping>  
  5.     <class name="com.sun.demo.Person" table="PERSON" schema="SCOTT">  
  6.         <id name="id" type="long" column="ID">  
  7.             <generator class="assigned" />  
  8.         </id>  
  9.         <property name="name" type="string" column="NAME" />  
  10.         <component name="address" class="com.sun.demo.Address">  
  11.             <property name="city" column="city" type="string" />  
  12.             <property name="street" column="street" type="string" />  
  13.             <property name="zipcode" column="zipcode" type="string" />  
  14.         </component>  
  15.     </class>  
  16. </hibernate-mapping>  

 

如何使用這種組合關系,先看一下存儲對象的代碼:

Java代碼
  1. package com.sun.demo;   
  2.   
  3. import junit.framework.TestCase;   
  4.   
  5. import org.hibernate.Session;   
  6. import org.hibernate.Transaction;   
  7.   
  8. public class TestPerson extends TestCase {   
  9.        
  10.     public void testSavePerson(){   
  11.            
  12.         Person person = new Person();   
  13.         person.setId(1001L);   
  14.         person.setName("peter");   
  15.         Address address = new Address("beijing","changan street","100080");   
  16.         person.setAddress(address);   
  17.            
  18.         Session session = HibernateSessionFactory.getSession();   
  19.         Transaction tx = session.beginTransaction();   
  20.         session.save(person);   
  21.         tx.commit();   
  22.         HibernateSessionFactory.closeSession();   
  23.     }   
  24.   
  25. }  
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Eclipse快速上手Hibernate--6.關聯(lián)映射(一對一)(1)
Annotation對Hibernate中聯(lián)合主鍵定義
初識在Spring Boot中使用JPA
Hibernate樹型結(jié)構(gòu)的算法,附源碼!
Hibernate4組件映射
在myeclipse下整合spring和hibernate
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服