天天看点

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

一 数据关联

  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() ;

继续阅读