一 数据关联
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() ;