hibernate多对一关联映射

来源:百度文库 编辑:神马文学网 时间:2024/09/21 08:45:36
一个学生住在一个宿舍里面,一个宿舍里面住着多个学生。学生是多放,把少反(宿舍)primary key放入。1。数据库的建立:
     CREATE TABLE room (
    id INT(11) NOT NULL auto_increment PRIMARY KEY,
    address VARCHAR(100) NOT NULL default ''
    );  CREATE TABLE user (
    id INT(11) NOT NULL auto_increment PRIMARY KEY,
    name VARCHAR(100) NOT NULL default '',
    room_id INT(11)
  );2。映射类的建立:
    package MulToOne; /////////////////////////////////////////////////////////////////
public class Room {
    private Integer id;
    private String address;
   
    public Room() {
    }
   
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }   
   
    public String getAddress() {
        return address;
    }
   
    public void setAddress(String address) {
        this.address = address;
    }
}/////////////////////////////////////////////////////////////////
package MulToOne;public class User {
    private Integer id;
    private String name;
    private Room room;    public User() {
    }    public Integer getId() {
        return id;
    }    public void setId(Integer 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;
    }  
}3。这写类的匹配数据库配置文件
/////////////////////////////////////////////////////////

    PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">    
       
           
       
                          column="address"
                  type="java.lang.String"/>
   
/////////////////////////////////////////////////////////

    PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">    
       
           
       
       
       
       
 
 
 
                       column="room_id"
                     class="MulToOne.Room"
                     cascade="all"
                     outer-join="true"/>        
   
5。在hibernate.hbm.xml中加入两行:
    
     6。测试文件:
     package MulToOne;
import org.hibernate.*;
import org.hibernate.criterion.Expression;
/* 在下面例子中,只要存取多方就可以了
 
 在Hibernate中是以映射文件中標籤上的cascade屬性來設定,預設上是none,以 多對一 中的範例來說,
 如果不設定cascade為true,則您必須分別對User實例與Room實例進行儲存,而不是本例子中所示的只对User
 这一多方进行存储。
    如下:
                      column="room_id"
                     class="MulToOne.Room"
                     cascade="all"
                     outer-join="true"/>*/
class  TestRoomUser
{
 public static void main(String[] args)
 {
  TestRoomUser.testSave();
  TestRoomUser.testLoad();
 } public static void testSave()
 {
  Room room1 = new Room();
  room1.setAddress("96#");
  Room room2 = new Room();
  room2.setAddress("94#");
     
  User user1 = new User();
  user1.setName("yinbodotcc");
  user1.setRoom(room1);////////////////////
     
  User user2 = new User();
  user2.setName("Yang Anyin");
  user2.setRoom(room1);////////////////////
     
 
  Session session =util.HibernateUtil.getSessionFactory().getCurrentSession();
  Transaction tx = session.beginTransaction();
     
  session.save(user1); // 主控方操作,被控方也會對應操作
  session.save(user2);
 
     
  tx.commit();
  util.HibernateUtil.getSessionFactory().close();
 }
 public static void testLoad()
 {
      
 
  Session session =util.HibernateUtil.getSessionFactory().getCurrentSession();
  Transaction tx = session.beginTransaction();//现在的load必须要事务。  User user = (User) session.load(User.class, new Integer(1));//找不到时候,会报异常发生。
  if(user!=null)
  {
   System.out.println(user.getName());
   System.out.println(user.getRoom().getAddress());
  }  tx.commit();
  util.HibernateUtil.getSessionFactory().close();
 }
}
说明的是,这里的util.HibernateUtil类,在以前的Hibernate学习中已经给出过,SessionFactory的获取方法为:
sessionFactory = new Configuration().configure().buildSessionFactory();  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yinbodotcc/archive/2007/02/08/1505445.aspx