2010年10月7日 星期四

Hibernate 教學 - 一對多 (Value Type)

介紹一下有關值型別(Value Type) 的一對多關係映射

在之前已經討論過值型別與個體型別的差異了

以本文為例舉個例子,在一對多當中如果多的這一方並不需要一個實際的類別

例如說該資料只是一個字串,但這筆資料必須存入到資料庫當中

這時候就可以以一對多的(Value Type) 的關係映射來實現本案例

我們以一個人(Person)有多個信箱 email 來舉例

顯然的人(Person)是一,而 email 是多,而且 email 僅以字串格式儲存

來看一下 Person.java
package MapPOJO;
import java.util.Set;
public class Person implements java.io.Serializable
{
    private Long id;
    private String name;
    private Set email;

    public Person(){}

    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 Set getEmail(){
        return email;
    }
    public void setEmail(Set email){
        this.email= email;
    }
}

接下來是組態檔 Person.hbm.xml

  
      
          
      
      
      
          
           
          
          
          
      
  


最後以一張網頁 Insert 資料作示範
<%
    Person e1 = new Person();
    e1.setName("Fang");
    Persone2 = new Person();
    e2.setName("Lin");


    Set email1 = new HashSet();
    email1.add("abc@hotmail.com");
    email1.add("def@yahoo.com");
    email1.add("ABC@gmail.com");


    Set email2 = new HashSet();
    email2.add("user@hotmail.com");
    email2.add("user2@hotmail.com");


    e1.setEmail(email1);
    e2.setEmail(email2);


    org.hibernate.SessionFactory sessionfactory =    HibernateUtil.getSessionFactory();
    org.hibernate.Session sess = sessionfactory.openSession();
    org.hibernate.Transaction tx = sess.beginTransaction();


    sess.save(e1);
    sess.save(e2);
    tx.commit();


    sess.close();
%>

沒有留言:

張貼留言