`
dodojava
  • 浏览: 12204 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hibernate中的几种经典对象模型和关系模型的映射

阅读更多

 

转自:http://www.blogjava.net/javavle/archive/2011/01/03/342111.html

 

1.many to one 多对一映射
此种模型最经典的为user-->group,即站在user的角度上看,是由多个user对象属于一个group对象。反过来 的话,则是一个group对应多个user,那是一对多关系。此种映射一旦建立,能在得到user对象的时候通过对象之间的关系得到group的属性。

类:
User:
private int id;
private String name;
private Group group;
Group: 
private int id;
private String name;

主要映射文件:
<class name="com.vle.domain.User" table="t_user">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <many-to-one name="group" column="groupid"/>
 </class>

得到属性值:
User u=(User) session.load(User.class, 1);
System.out.print(u.getName()+"-->"+u.getGroup().getName());

2.one2one 主键关联 单向映射
Person-->IdCard 一个人对应一个身份证,"人"引用了"身份证"的主键作为外键,同时也作为"人"这张表的主键。
Person: 
private int id;
private String name;
private IdCard idCard;
IdCard:
private int id;
private String cardNo;

主要映射文件:
<class name="com.vle.domain.Person" table="t_person">
  <id name="id">
   <!-- 通过foreign得到id生成策略,foreign会得到关联对象的标示 -->
   <generator class="foreign">
    <!-- property指的是建立关系的关联对象,即Person中引用IdCard的idCard -->
    <param name="property">idCard</param>
   </generator>
  </id>
  <property name="name"/>
   <!-- 使用one-to-one标签进行描述,不会改变表结构,让hibernate加载关联对象,默认关联对象的主键作为此类的主键
    使用 constrained生成外键约束
    name:指加载对象时,通过Person指定的主键(也就是idCard)把IdCard的关联加上去
    -->
  <one-to-one name="idCard" constrained="true"/>
 </class>

3.one2one 主键关联 双向映射
需要在IdCard对象中加入对Person的引用 
IdCard:
private int id;
private String cardNo;
private Person person;

并且需要在IdCard.hbm.xml中加入对引用的描述:
 <class name="com.vle.domain.IdCard" table="t_idcard">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="cardNo"/>
  <one-to-one name="person"/>
 </class>

4 one2one 唯一外键关联 单向关联
在person中持有idcard的引用:
private IdCard idCard;
Person映射文件:
 <class name="com.vle.domain.Person" table="t_person">
  <id name="id">
   <generator class="native"/>
    </id>
  <property name="name"/>
  <many-to-one name="idCard" unique="true"/>
 </class>
一对一唯一外键关联可以看做多对一的一种特例,只需要在many to one标签中将unique的属性设置为true即可。

5 one2one 唯一外键关联 双向关联
需要在IdCard中持有对Person的引用
private Person person;
IdCard映射文件:
 <one-to-one name="person" property-ref="idCard"/>
将person用一对一标签描述,并且引用了外键idCard。

分享到:
评论

相关推荐

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    精通Hibernate:对象持久化技术第二版part3

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    删掉,复制别人东西,怕侵权,原本只想收藏的

    由于JDBC存在的缺陷,在实际工作中我们很少直接使用jdbc进行编程,用的更多的是ORM对象关系模型来操作数据库,Hibernate就是一个ORM模型 Hibernate: Hibernate是建立在若干POJO通过xml映射文件(或注解)提供的...

    ssh(structs,spring,hibernate)框架中的上传下载

     您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate Syhchronizer等工具或手工的方式,编写Hibernate的领域对象和映射文件。其中对应T_FILE表的领域对象Tfile.java为:  代码 1 领域对象Tfile 1. ...

    Java语言基础下载

    类和对象的描述 32 声明类 32 声明属性 33 声明成员方法 34 源文件的布局 36 包的声明 36 包与目录的布局 38 内容总结 45 独立实践 46 第四章: Java语法基础 47 学习目标 47 基本语法元素 48 Java关键字 49 基本...

    java面试题

    多线程几种实现方法,同步? 答:多线程有两种实现方法,一种是继承Thread类或者实现Runnable接口。同步就是在方法返回类型后面加上synchronized。 c#中的委托,事件是不是委托? 答:委托就是将方法作为一个参数...

    Java常见面试题208道.docx

    118.在 hibernate 中使用 Integer 和 int 做映射有什么区别? 119.hibernate 是如何工作的? 120.get()和 load()的区别? 121.说一下 hibernate 的缓存机制? 122.hibernate 对象有哪些状态? 123.在 hibernate 中 ...

    java-ee电子商城系统课程设计.doc

    Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC 进行了非常轻量级的对象封装,使得Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate 可以应用在任何使用JDBC 的场合, 既可以在Java 的...

    计算机网络专业毕业实习报告3000字.docx

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...

    【计算机软件毕业设计】二手车交易平台的分析、设计与实现文献综述1.doc

    文献综述 摘 要 Web开发技术和Web开发框架整合实践研究是这个时代的一个热点,本文在参阅国内 外Web开发技术和Web开发框架及... Raible学者认为,Hibernate是一个面对Java环境的对象/关系数据库映射工具, 它对JDBC进

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...

    支持多数据库的ORM框架ef-orm.zip

    表结构元数据的API也向用户开放,同时支持在使用过程中,灵活调整映射关系,因此用户可以用API动态的创建表结构的模型,从而实现各种动态类型和表的映射(例如POJO中包含一个Map,用于映射各种动态扩展的字段)企业...

    本科毕业设计开题报告(计算机协会信息管理系统的设计与实现V5)

    本系统创建数据库模型是使用PowerDesigner创建数据库关系模型,并映射到数据库中产生关系数据库。PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系...

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java开源包1

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包11

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包2

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包3

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包6

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包5

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

Global site tag (gtag.js) - Google Analytics