Hibernate一对一关系操作对象

原创 2006年05月25日 12:01:00

Hibernate一对一关系操作对象 

总的来说有四种方式,我将意义的在本片文章中介绍
一:以主键关联

 概念:关联的两个实体共享一个主键
例如我们建立两个表,分别为user id pk,name,password
                                            userinfor id pk,email,age,address
user和userinfor共享一个主键id,并且两个表是一对一关系,那么如何让一个表引用另一个表生成的主键那?我们可以用hibernate的主键foreign机制生成。
我们先看看user.hbm.xml文件
.......
<hibernate-mapping>
 <class name="model.User" lazy="true">
  <id name="id" unsaved-value="null">
   <generator class="uuid.hex"/>
  </id>
  <property name="name" type="string"/>
  <property name="password" type="string"/>
  <one-to-one name="userinfor"
       class="model.Userinfor"
       fetch="join"
       cascade="all"
       />
 </class>
<hibernate-mapping>
.......
    one-to-one的属性cascade=all表示user的增删改操作也会反映在userinfor对象当中。我们再看看userinfor.hbm.xml文件.
<hibernate-mapping>
 <id name="id">
  <generator name="foreign">
   <param name="property">user</param>
  </generator>
 </id>
 <property name="email" column="email" type="string"/>
 <property name="age" column="age" type="int"/>
 <property name="address" column="address" type="string"/>
 <one-to-one name="user"
      class="model.User"
      constrained="true"<!-引用user的主键id为外键-->
      />
</hibernate-mapping>
让我们看看java的代码片段
.....
User user=new User();
user.setName("name");
user.setPassword("pass");
Userinfor u=new Userinfor();
u.setEmail("email");
u.setAge(11);
u.setAddress("address");
user.setUserinfor(u);
u.setUser(user);
DAO.saveObj(user);
最后打开你的数据库旧可以看到结果了。

二,一对一以外键关联

 以外键关联的概念:两个实体各自有不同的主键,但是一个实体有一个外键引用另一个实体的主键。例如:
 表 user id pk,name,passeword
    userinfor id pk,uid fk,infor
 先看user.hbm.xml
 ......
 <hibernate-mapping>
 <class name="user" table="user" lazy="true">
  <id name="id" unsaved-value="null">
   <generator class="uuid.hex"/>
  </id>
  <property name="name" type="string"/>
  <property name="password" type="string"/>
  <one-to-one name="userinfor"
   class="model.Userinfor"
   fetch="join"
   cascade="all"
   />
 </class>
 </hibernate-mapping>
 可以看到这个同我们第一次用到的一样啊
 然后我们看看userinfor.hbm.xml的结构
 .....
 <hibernate-mapping>
 <class name="userinfor" table="userinfor" lazy="true">
  <id name="id">
   <generator class="uuid.hex"/>
  </id>
  <property name="infor" column="infor" type="string"/>
  <many-to-one name="user"
    class="model.User"
    unique="true"
    <!-唯一的多对一,其实就便成了一对一了-->
    columnn="uid"
    />
 </class>
 </hibernate-mapping>
 以外键关联的一对一,其实就变成了一对多的双向关联,编写时直接按照一对多和多对一的要求编写,最后在many-to-one加上unique='true'即可说明他只不过是一对多关系的一个特例。编写java代码:
.......
User u=new User();
u.setName("name");
u.setPassword("password");
Userinfor ui=new Userinfor();
ui.setInfor("infor");
u.setUserinfor(ui);
ui.setUser(u);
DAO.saveObj(u);
......
三:默认的级连关系

 一对多默认级连关系为预先抓取,而一对多,多对多都是立即加载
看看user.hbm.xml
<one-to-one name="userinfor"
  class="model.Userinfor"
  cascade="all"/>
以上我们并没有显示的设置级连关系。这样在取的userinfor时将用默认的级连关系。
.....
User u=(User)DAO.getByid(User.class,"字符穿,相当于where id='此值'");

四:延迟加载

 一对一关系进行延迟加载时与其他关系不同,多对一是在class标签中设置lazy='true',一对多和多对多是在set标签中设置lazy=”true“,而一对一则在class标签当中设置lazy='true'并且在one-to-one标签当中设置constrained='true'。
 .....
 <hibernate-mapping>
 <class name="model.User" table="user">
  <one-to-one name="userinfor"
    class="model.Userinfor"
    contrained="true"
    cascade="all"
    />
 </class>
 </hibernate-mapping>
java代码
...
User u=(User)DAO.getByid(User.class,"id");
.....
次代码只是加载了user对象,而没有加载userinfor对象,而且忽略了默认的预先抓取,(这是默认的,只有显示的指定fatch='true'时才采用预先抓取的)

相关文章推荐

14-hibernate实战 一对一对象关系模型映射(公民和身份证)

Person.java package cn.itcast.hibernate.domain; public class Person { private int id; private St...

hibernate对象关系映射( 一对一,一对多,多对一,多对多的单向,双向映射 ——)

对象之间的关系: 关系映射之间的关系只的是对象之间的关系,并不指数据库表的关系(外键关系)这儿解决的问题是当对象之间的关系之一时,数据库表该如何映射,编程上如何对待。   一对一(主键关联,...
  • oufua
  • oufua
  • 2014年09月13日 19:19
  • 354

【HIbernate框架学习】:Hibernate对象关系映射之一对一关联映射(一)

一对一关联映射在实际生活中是比较常见的,如人与身份证的关系,通过人这个对象可以找到身份证相关的信 息,也可以通过身份证这个对象找到人相关的信息。        有两种策略可以实现一对一的关联映射:...

【HIbernate框架学习】:Hibernate对象关系映射之一对一关联映射(二)

接着上一篇接着说一对一关联映射。        单向一对一唯一外键关联映射        我们先来假设一个场景,从Person中能看到IdCard,也就是在person数据表加上一个外键字段idC...

hibernate单边一对一关系demo

  • 2015年10月07日 19:14
  • 499KB
  • 下载

Hibernate映射一对一的关联关系

本文主要介绍使用Hibernate映射一对一的关联关系的两种方式:使用外键映射、使用主键映射。 回到顶部 1.数据库表的一对一关联关系     本文根据客户信息表(tb_cust...

hibernate一对一外键关系

  • 2013年07月12日 15:04
  • 4.69MB
  • 下载

Hibernate中表的一对一关系

一对一关系 l  情况1:主表的主键,与从表的外键(唯一),形成主外键关系 l  情况2:主表的主键,与从表的主键,形成主外键关系(从表的主键又是外键) 情况一:使用外键 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate一对一关系操作对象
举报原因:
原因补充:

(最多只允许输入30个字)