Hibernate O/R映射三大基本定则

转载 2006年06月09日 22:06:00

Hibernate O/R映射三大基本定则

发表:2004-4-2 10:40:43 出处:你的博客网(yourblog.org)

1. 引言
在Java环境下,有多种对象关系映射方法,如实体Bean、OJB、JDO、JDBC等。Hibernate是一种新的O/R映射工具,它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制。Hibernate非常简单易学,目前国内有很多同行已经或正在用Hibernate开发实施项目;但Hibernate有很多规则不为人知或应用甚少。本文的目的就是将这些规则归纳总结,希望对您的开发和设计有益。

首先声明,本文是Hibernate入门级文章,高手请不用往下看了。

2. 基本定则

定则一:数据库配置文件名称可以不是Hibernate.properties或Hibernate.cfg.xml

由于Hibernate官方文档(本文www.hibernate.org的文档)的影响,很多Hibernate开发者误以为系统一定要有名称为Hibernate.properties或Hibernate.cfg.xml的文件,而且一定要放在classes的根目录下。实际上,该文件只是一般的配置文件,名称可以自己取,文件位置可以自己定,而且在多数据库环境下,可以有多个配置文件,使得程序可以连接多个数据库。只是您在创建会话工厂时需要特殊处理,代码示例如下:

//配置文件名称

protected static String CONFIG_FILE = "my_hibernate.config";

//配置文件目录,可以考虑在该目录下存放系统所有配置文件,此处使用虚拟机参数

String configPath = System.getProperty("my.config");

//创建会话工厂

sessionFactory =( new Configuration().configure(new File(configPath+File.separator+CONFIG_FILE))) .buildSessionFactory();

定则二:小型项目中,.hbm.xml文件可以合并到一个文件中

同样由于Hibernate官方文档的影响,很多Hibernate开发者误以为Hibernate的对象关系映射一定要一个表对应一个对象,并将映射文件和对象文件放在同一目录下。实际上,该模式是为规范性考虑而设计的,因为在多人参与的项目中,多人要维护同一文件容易产生冲突;当项目比较小时,配置文件的维护人员少,我们完全可以将.hbm.xml文件合并到一个或者几个文件中。依据作者本人的项目设计开发经验,最好是项目中有几人同时从事O/R映射和持久工作,则设定几个.hbm.xml文件,每人维护一个。当然,为了便于分类和管理,每人的工作应该按逻辑划分。

大型项目中的文件配置示例如下:

<hibernate-configuration>

<session-factory>

<!—映射文件分散 -->

<mapping resource="com/hongsoft/test/ persistence/Cat.hbm.xml"/>

<mapping resource="com/hongsoft/test/ persistence/Animal.hbm.xml"/>

</session-factory>

</hibernate-configuration>

小型项目中的文件配置示例如下:

<hibernate-configuration>

<session-factory>

<!—映射文件集中 -->

<mapping resource="res_hibernate_map.xml"/>

</session-factory>

</hibernate-configuration>

要注意的是, 从对Hibernate源代码的分析可知,指定映射文件时,不能用绝对目录,只能用相对目录;而且,系统以classes根目录为当前目录。

定则三:对象关系映射是以.hbm.xml文件为基准的,而不是以PO文件为基准

该定律的意思是:系统启动检查您的对象关系映射是否正确时,是以.hbm.xml为基准来进行检查的;对象文件的property可以比映射文件的property多,但不能少。如果您有如下的映射:

<class name="com.hongsoft.test.User" table="res_user">

<id name="id" column="id" type="long" unsaved-value="any">

<generator class="assigned">

</generator>

</id>

<property name="name"/>

<property name="loginName"/>

<property name="passwd"/>

</class>

系统启动,检查数据库和其他配置正确后,将以该文件为基准,首先检查User对象中有无id属性和对应的get/set方法,如果没有则报错,如果有且正确则检查有无name属性和对应的get/set方法……,直到文件结束。要注意的是,如果属性为name,则get方法名称必须为getName(),set方法名称必须为setName(),否则会报错。

如果User对象除了有id,name,loginName, passwd四个属性和对应的方法,还有其它的属性和方法,会报错吗?不会,因为对象关系映射是以.hbm.xml文件为基准的,而不是以PO文件为基准。您在项目中可以充分利用该特点,实现您自己的比较特殊的需求。例如,您可以在User对象中加入updatedPasswd表示更改后的口令,由此构造在表示层要使用的FormBean和在业务层要使用的valueObject。当然,这样做也有缺点,需要根据您的实际情况而定。

3. 总结
上面是作者对Hibernate映射的容易理解错误的知识点的归纳总结,希望对您有帮助。如果您发现有错误或有自己的观点,欢迎讨论。

Hibernate O/R映射三大基本定则

1.   引言在Java环境下,有多种对象关系映射方法,如实体Bean、OJB、JDO、JDBC等。Hibernate是一种新的O/R映射工具,它不仅提供了从Java类到数据表的映射,也提供了数据查询...
  • ziziq
  • ziziq
  • 2005年06月06日 22:52
  • 564

Hibernate O/R 映射三大基本定则

Hibernate O/R映射三大基本定则1.      引言在Java环境下,有多种对象关系映射方法,如实体Bean、OJB、JDO、JDBC等。Hibernate是一种新的O/R映射工具,它不仅提...
  • SimpleChinese
  • SimpleChinese
  • 2005年04月17日 02:30
  • 730

Hibernate O/R映射三大基本定则

? Hibernate O/R映射三大基本定则1.?? 引言在Java环境下,有多种对象关系映射方法,如实体Bean、OJB、JDO、JDBC等。Hibernate是一种新的O/R映射工具,它不仅...
  • softstars
  • softstars
  • 2008年06月10日 16:49
  • 160

Hibernate O/R映射三大基本定则

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";...
  • java169
  • java169
  • 2008年05月24日 04:07
  • 140

Hibernate O/R映射三大基本定则

? Hibernate O/R映射三大基本定则1.?? 引言在Java环境下,有多种对象关系映射方法,如实体Bean、OJB、JDO、JDBC等。Hibernate是一种新的O/R映射工具,它不仅提供...
  • hongbo781202
  • hongbo781202
  • 2004年05月31日 16:42
  • 6019

【SSH】Hibernate:O/R实体映射与一对一关联

实体映射 O/R映射是ORM框架中最为关键的组成部分了。其中的实体映射介绍hibernate中类和表之间的映射属性字段的基本技术   问题:数据库中有一个表【T_User】,其中字段有【ID】、【na...
  • mengdonghui123456
  • mengdonghui123456
  • 2016年05月16日 18:04
  • 1241

O/R Mapping 对象关系映射 (ORM) 之Hibernate

目前主流的数据库都是关系型数据库,现在编程技术都是面向对象的程序设计方法,需要使用 对象去描述关系数据库中的表,以及使用对象之间的关系描述表之间的关联,就出现了对象关系映射 (Object Relat...
  • whiteblack_dream
  • whiteblack_dream
  • 2017年05月02日 22:36
  • 333

过程模式之O/R映射映射

       对象方式的基础是用具有数据和行为的对象来构建应用;关系方式的基础是将数据存储在表的行中。在将对象用关系数据库存储时,自然存在对象/关系阻抗不匹配。它们的本质区别使得这两种方式结合的并不完...
  • huankfy
  • huankfy
  • 2007年07月16日 23:08
  • 1624

Hibernate:O/R映射层

O/R映射层是持久层的一个特例,它的数据模型是对象模型(Object),存储模型是关系模型(Relational),cmp和Hibernate是对象模型到关系模型之间转换的两种不同实现。由于对象模型和...
  • Miniyaner
  • Miniyaner
  • 2013年06月07日 11:51
  • 2601

Hibernate框架基础——映射普通属性

持久化对象与OID对持久化对象的要求 提供一个无参的构造器。使Hibernate可以使用Constructor.newInstance()来实例化持久化类。 提供一个标识属性(identifier p...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年10月05日 18:09
  • 1518
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate O/R映射三大基本定则
举报原因:
原因补充:

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