和風細雨

          世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

          單個類包含關系的Hibernate映射

          單類包含是指一個類是另一個類的成員變量,比如有這樣兩個類,個人(Person)和地址(Addr),Addr是Person的成員變量,類圖如下:

          兩個類分別對應數據庫中的Persons和Addrs表,它們的ER圖如下:


          具體怎么把OO對象和具體的數據庫實體表無縫聯系起來呢,下面的代碼展示了如何把兩個類映射到數據庫中的表.

          Person類代碼:
          package com.sitinspring.personaddress;

          public class Person{
              
          private long id;
              
          private long aid;
              
          private String name;
              
          private Addr addr;
              
              
          public Person(){
                  
              }

              
              
          public Person(long id,long aid,String name){
                  
          this.id=id;
                  
          this.aid=aid;
                  
          this.name=name;
              }

              
              
          public String toString(){
                  
          return "Person id="+id+" aid="+aid+" name="+name+addr;
              }


              
          public long getId() {
                  
          return id;
              }


              
          public void setId(long id) {
                  
          this.id = id;
              }


              
          public String getName() {
                  
          return name;
              }


              
          public void setName(String name) {
                  
          this.name = name;
              }


              
          public Addr getAddr() {
                  
          return addr;
              }


              
          public void setAddr(Addr addr) {
                  
          this.addr = addr;
              }


              
          public long getAid() {
                  
          return aid;
              }


              
          public void setAid(long aid) {
                  
          this.aid = aid;
              }

          }


          相應的Person.hbm.xml:
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC 
              "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
          >
          <hibernate-mapping package="org.hibernate.auction">
              
          <class name="com.sitinspring.personaddress.Person"
                  table
          ="PERSONS">
                  
          <id name="id" column="ID" />
                  
          <property name="name" column="NAME" />

                  
          <many-to-one name="addr" column="AID"
                      class
          ="com.sitinspring.personaddress.Addr"  cascade="all" lazy="false"/>
              
          </class>
          </hibernate-mapping>

          Addr類代碼;
          package com.sitinspring.personaddress;


          public class Addr{
              
          private long id;
              
          private String phAddr;
              
          private String mailAddr;
              
              
          public Addr(){
                  
              }

              
              
          public Addr(String phAddr,String mailAddr){
                  
          this.phAddr=phAddr;
                  
          this.mailAddr=mailAddr;
              }

              
              
          public String toString(){
                  
          return "Addr id="+id+" phAddr="+phAddr+" mailAddr="+mailAddr;
              }

              
              
          public long getId() {
                  
          return id;
              }

              
          public void setId(long id) {
                  
          this.id = id;
              }

              
          public String getMailAddr() {
                  
          return mailAddr;
              }

              
          public void setMailAddr(String mailAddr) {
                  
          this.mailAddr = mailAddr;
              }

              
          public String getPhAddr() {
                  
          return phAddr;
              }

              
          public void setPhAddr(String phAddr) {
                  
          this.phAddr = phAddr;
              }

          }

          Addr.hbm.xml:
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC 
              
          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping package="org.hibernate.auction">
              
          <class name="com.sitinspring.personaddress.Addr" table="ADDRS">
                  
          <id name="id" column="ID"/>
                  
          <property name="phAddr" column="PHADDR" />
                  
          <property name="mailAddr" column="MAILADDR" />
              
          </class>
          </hibernate-mapping>

          測試代碼如下:
          package com.sitinspring.personaddress;

          import org.hibernate.Session;

          import com.sitinspring.util.HibernateUtil;

          public class Main {
              
          public static void main(String[] args) {
                  Session session 
          = HibernateUtil.getSessionFactory().getCurrentSession();
                  session.beginTransaction();

                  
          // --插入代碼開始
                  Person person=new Person(1,11,"Andy");
                  person.setAddr(
          new Addr("Baijing Street","Andy@Andy.com"));        
                  session.save(person);
                  session.flush();
                  
          // --插入代碼結束

                  
          // --讀取代碼開始
                  long i = 1;
                  Person personLoaded 
          = (Person) session.load(Person.class, i);
                  System.out.println(personLoaded);
                  
          // --讀取代碼開始

                  session.getTransaction().commit();
                  HibernateUtil.getSessionFactory().close();
              }

          }

          插入完畢后數據庫的內容如下:




          代碼下載:
          http://www.aygfsteel.com/Files/sitinspring/HibernateClasses20071109085612.rar

          posted on 2008-02-22 11:24 和風細雨 閱讀(372) 評論(0)  編輯  收藏 所屬分類: Hibernate

          主站蜘蛛池模板: 额济纳旗| 通城县| 阿鲁科尔沁旗| 辽宁省| 南汇区| 通渭县| 珠海市| 达日县| 湘乡市| 榆中县| 五峰| 临海市| 永州市| 长武县| 建水县| 瓮安县| 榆社县| 台东县| 库车县| 土默特右旗| 沈阳市| 鸡泽县| 亚东县| 监利县| 永吉县| 凤山市| 禹城市| 锡林浩特市| 且末县| 夏邑县| 沁水县| 新邵县| 准格尔旗| 天峨县| 怀仁县| 吉安市| 内江市| 湾仔区| 承德市| 金湖县| 泗水县|