1. 程式人生 > >一個完整的hibernate的one-to-many的例子

一個完整的hibernate的one-to-many的例子

前段時間一直在研究hibernate的one-to-many,看了不少資料也在本論壇上求教過,但由於本人對Hibernate研究的時間不是很長,所以花了不少時間和精力.昨天終於弄出來了,現在與大家分享,希望對初學者有幫助!

1、設定資料庫,本人使用的資料庫是Oracle 9i
   設定hibernate.properties
   ## Oracle

   hibernate.dialect net.sf.hibernate.dialect.Oracle9Dialect
   #hibernate.dialect net.sf.hibernate.dialect.OracleDialect
   hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
   hibernate.connection.username sa
   hibernate.connection.password sa
   hibernate.connection.url jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:myoracle

2、假設一個使用者可以同時有幾個帳戶,能通過帳戶對應到使用者,即為一個雙向的one-to-many.這是引用我在論壇上發表的文章的回覆,很謝謝geniouc給我的參考。

3、javaBean: customer & account
  
  1.   public
     class Customer {
  2.   private  cid;
  3.   private  custName;
  4.   private Set accounts= new HashSet();
  5.   public Customer(){
  6.   }
  7.   public  getCid() {
  8.     return cid;
  9.   }
  10.   public void setCid( cid) {
  11.     this.cid = cid;
  12.   }
  13.   public  getCustName() {
  14.     return custName;
  15.   }
  16.   public void setCustName( custName) {
  17.     this.custName = custName;
  18.   }
  19.   public Set getAccounts(){
  20.      return accounts;
  21.   }
  22.   public void setAccounts(Set accounts){
  23.      this.accounts = accounts;
  24.   }
  25. }
  26.   public class Account {
  27.   private long aid;
  28.   private  accNumber;
  29.   private Customer customer;
  30.   public Account(){
  31.   }
  32.   public long getAid() {
  33.     return aid;
  34.   }
  35.   public void setAid(long aid) {
  36.     this.aid = aid;
  37.   }
  38.   public  getAccNumber() {
  39.     return accNumber;
  40.   }
  41.   public void setAccNumber( accNumber) {
  42.     this.accNumber = accNumber;
  43.   }
  44.   public Customer getCustomer(){
  45.      return customer;
  46.   }
  47.   public void setCustomer(Customer customer){
  48.      this.customer = customer;
  49.   }
  50. }


4、xml配置檔案中:(關係的建立)
Account.hbm.xml
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping
  3.     PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  5. <hibernate-mapping> 
  6.     <class name="one2many.Account" table="Account"
  7.         <id name="aid" type="long" column="aid" unsaved-value="0"
  8.             <generator class="increment"/> 
  9.         </id>
  10.         <property name="accNumber" type="string"/>
  11.         <many-to-one name="customer" column="cidForCustomer"/> 
  12.     </class>
  13. </hibernate-mapping>

Customer.hbm.xml
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping
  3.     PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  5. <hibernate-mapping>
  6.     <class name="one2many.Customer" table="Customer">
  7.     <id name="cid" type="string" column="cid"
  8.             <generator class="assigned"/> 
  9.         </id>
  10.     <property name="custName" type="string"/>        
  11.      <set name="accounts" lazy="true" inverse="true" cascade="all" >
  12.      <key column="cidForCustomer"/>
  13.      <one-to-many class="one2many/Account"/>
  14.      </set>
  15.     </class
  16. </hibernate-mapping>

5、測試程式,Test.java

  1. package one2many;
  2. import net.sf.hibernate.*;
  3. import net.sf.hibernate.cfg.*;
  4. public class Test {
  5. public static void main([] args) throws HibernateException {
  6.      Configuration conf= new Configuration();
  7.      conf.addClass(Account.class);
  8.      conf.addClass(Customer.class);
  9.      SessionFactory sessionFactory = conf.buildSessionFactory();
  10.      Customer cust = new Customer();
  11.      cust.setCid("aa");
  12.      cust.setCustName("Kelvin");
  13.      Account acc = new Account();
  14.      acc.setAccNumber("acc");
  15.      acc.setCustomer(cust);
  16.      Account acc1 = new Account();
  17.      acc1.setAccNumber("acc1");
  18.      acc1.setCustomer(cust);
  19.      cust.getAccounts().add(acc);
  20.      cust.getAccounts().add(acc1);
  21.      Session session = sessionFactory.openSession();
  22.      Transaction tx= session.beginTransaction();
  23.      session.save(cust);
  24.      tx.commit();
  25.      session.close();
  26.      sessionFactory.close();
  27.  }