想飞就别怕摔

大爷的并TM骂人

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

posted on 2008-07-24 12:42 生命的绽放 阅读(1850) 评论(0)  编辑  收藏 所属分类: Hibernate


只有注册用户登录后才能发表评论。


网站导航:
 
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(5)

随笔分类(94)

随笔档案(93)

文章分类(5)

文章档案(5)

相册

JAVA之桥

SQL之音

兄弟之窗

常用工具下载

积分与排名

最新评论

阅读排行榜