hibernate 数据关联(一对一关联)

来源:互联网 发布:cctv直播软件 编辑:程序博客网 时间:2024/05/21 14:47

一 数据关联

 

  1  一对一关联

      该类型包括两种(1) 主键关联 , (2)唯一外键关联。

 

 a 主键关联

 

         两张表通过主键关系形成一对一的映射。 一个典型的主键关联实例,用户和护照。用户只有一个护照,一本护照页只有

一个主人。在hibernate 中通过 One-to-one节点对一对一的关系进行描述。

 

    passport的映射文件中 ,节点为:

 

        <class name="cn.bupt.duming.vo.Passport" table="passport" catalog="login">
    
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="foreign" >
            <param name="property">user</param>
            </generator>
        </id>
        
                
        <property name="serial" type="java.lang.String">
            <column name="serial" length="20" />
        </property>
        
        <property name="expiry" type="java.lang.Integer">
            <column name="expiry" />
        </property>
        
           <one-to-one name="user" class="cn.bupt.duming.vo.User" constrained="true"
        />
    </class>

 

user 的映射文件 ,节点为:

 

 <class name="cn.bupt.duming.vo.User" table="user" catalog="login">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
        </id>
        <property name="age" type="java.lang.Integer">
            <column name="age" />
        </property>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" />
        </property>
            
            <one-to-one name ="passport" class="cn.bupt.duming.vo.Passport"
            cascade ="all" outer-join="true">
            
            </one-to-one>
       
    </class>

 

 

(2) 实体类中也应该存在关联关系

 

   public class Passport implements Serializable {
 
    private int id  ;
   
    private String serial ;
   
    private int expiry ;
   
    private User user ;

 

}

 

  在passport类中拥有user类的实例 , 同样在user类的事例中存在passport的实例。

 

 

 

 

 

(3)测试代码

 

   User user = new User() ;
       
        user.setAge(20) ;
       
       
        user.setName("jake") ;
       
        Passport passport = new Passport() ;
       
        passport.setExpiry(3) ;
       
        passport.setSerial("CA4545") ;
       
        passport.setUser(user) ;
       
        user.setPassport(passport) ;
       
        Transaction tc = session.beginTransaction() ;
       
        session.save(user) ;
       
        tc.commit() ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击