Hibernate学习(二) ---【一对一主键单向关联】

Hibernate学习(二) ---【一对一主键单向关联】

为了简洁,我们创建两张表分别是Student和Certificate,它们只有主键ID和另外一个对象的引用标识符。 从student可以加载certificate。单向
Certificate Student.getCer(); // 返回Certificate对象
Student Certificate.gerStu(); // 返回Student对象

1.主键关联
所谓以主键关联,是指两张数据库表通过主键取得一对一的关联关系,也就是说一张表的主键是引用另一张表的外键。例如,对于Student和Certificate对象,一般来说是Student是主体,Certificate对象依附Student存在。它们主键关联的一对一关系就是在数据库中Student和Certificate表使用相同的主键值,这个由Student对象生成。Certificate应用这个主键值。它们共享同一主键值,这通过在Certificate表中设置外键来实现。 一对一主键关联映射中默认cascade="true";
2.一对一以主键关联的使用
既然它们是共用一个主键值,关键是如何让另一张表引用已经生成的主键值。这在Hibernate中使用的是主键的foreign生成机制。
下面是Student和Certificate类的配置源码。
Student.hbm.xml
< hibernate-mapping >
    
< class  name ="model.Student"  table ="student"  lazy ="true" > <!-- 把类数表关联起来 -->
        
< id  name ="id"  unsaved-value ="null" > <!-- id的产生方式是uuid.hex -->
            
< generator  class ="uuid.hex"   />
        
</ id >
        
< property  name ="name"  type ="String" > <!-- 映射学生名 -->
        
< property  name ="carId"  type ="String" > <!-- 映射映射号 -->
        
< property  name ="age"  type ="int" > <!-- 映射学生年龄 -->
        
< one-to-one  name ="cer"
         class
="model.Certificate"
         fetch
="join"  cascade ="all"  constrained ="true" /> <!-- 映射文件的身份证对象 -->
     
</ class >
</ hibernate-mapping >

以上的one-to-one设置为cascade="all",表示增加、删除、及修改Student对象时,都会级联增加、删除、修改Certificate对象。
constrained="true"约束这句话也要加上
Certificate.hbm.xml
< hibernate-mapping >
    
< class  name ="model.Certificate"  table ="certificate"  lazy ="true" > <!-- 把类数表关联起来 -->
        
< id  name ="id" >
<!-- 外键生成机制,引用stu对象的主键作为certificate数据表的主键和外键 -->
            
< generator  class ="foreign" >
                 
< param  name ="property" > stu </ param >
            
</ genetator >
        
</ id >
        
< property  name ="describe"  column ="describe" type ="String" >
     
</ class >
</ hibernate-mapping >
上述的两个配置文件在one-to-one中都没有设置column属性(其实他本身就没有column属性)。两个表是通过主键值得以连接的。现在建立一个学生和身份证对象,将他们设置为一对一关联存入数据库。
     // 建立身份证
    Certificate cer  =   new  Certificate();
    cer.setDescribe(
" spark " );
    
// 新建学生
    Student stu  =   new  Student();
    stu.setName(
" spark " );
    stu.setCardid(
" 10001 " );
    stu.setAge(
22 );
    
// 设置学生和身份证之间的关联
    stu.setCer(cer);
    StudentDAO.saveObj(stu);

你可能感兴趣的:(Hibernate学习(二) ---【一对一主键单向关联】)