2010年8月25日 星期三

Hibernate 教學 - 多對一 (Entity Type)

在上一篇談到得是一對多的關連,對於多對一來說

可以想像成一些學生會住在宿舍的同一間房間,

或是一間公司中,會有好幾個員工有同一個上司等等了。

那我還是以上一篇的多對一例子的資料表來實做多對一的關係映射

思考一下多對一的關係,即是很多個學生認得一間寢室

所以在學生 (Student) 類別裡,就必須引用所屬的寢室(Room)

程式如下:

package MapPOJO;
public class Student implements java.io.Serializable
{    
    private Long id;
    private String name;
    private Room room;  //引用(reference) Room
    public Student(){}

    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 room getRoom() {
        return room;
    }
    public void setRoom(room room) {
        this.room = room;
    }
}


package MapPOJO;
public class Room implements java.io.Serializable
{
    private Long id;
    private String address;  
    //這邊 Room 並沒有引用 Student, 即 Room 不認得 Student
    public Room(){}

    public Long getId(){
        return id;
    }
    public void setId(Long id){
        this.id = id;
    }
    public String getAddress(){
        return address;
    }
    public void setAddress(String address){
        this.address = address;
    }
}


完成好對應的類別後,再來看看映射文件如何將物件映射置資料庫

Room.hbm.xml




    
        
            
        
        
    



Student.hbm.xml






        
            
        
        

        
        
        
        
    



以上是 Room 和 Student 的映射文件

到目前為止相信應該都還不難理解

最後要記得在配置文件 hibernate.cfg.xml 中加入以下

<mapping resource="MapPOJO/Student.hbm.xml"/>
<mapping resource="MapPOJO/Room.hbm.xml"/>

接下來一樣透過一張 JSP 對資料庫進行儲存

// JSP 省略部份.....
Room room1 = new Room();
Room room2 = new Room();
room1.setAddress("ABCD");
room2.setAddress("EFGH");

Student student1 = new Student();
Student student2 = new Student();
Student student3 = new Student();

student1.setName("ALLEN");
student1.setRoom(room1);
student2.setName("Bob");
student2.setRoom(room1);
student3.setName("Candy");
student3.setRoom(room2);

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

sess.save(student1);
sess.save(student2);
sess.save(student3);

tx.commit();
sess.close();
// JSP 省略部份.....

沒有留言:

張貼留言