专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » hibernate映射:Hibernate O/R映射 3大基本定则 »正文

hibernate映射:Hibernate O/R映射 3大基本定则

来源: 发布时间:星期六, 2009年2月21日 浏览:0次 评论:0
        引言

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

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

        基本定则

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

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

//配置文件名称 protected String CONFIG_FILE = "my_hibernate.config"; //配置文件目录,可以考虑在该目录下存放系统所有配置文件,此处使用虚拟机参数 String configPath = .getProperty("my.config");  //创建会话工厂  sessionFactory =( Configuration.configure( File(configPath+File.sep
arator+CONFIG_FILE))) .buildSessionFactory;



        定则 2:小型项目中,.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源代码分析可知,指定映射文件时,不能用绝对目录,只能用相对目录;而且,系统以es根目录为当前目录

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

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

=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px/18px Verdana; TEXT-TRANSFORM: none; COLOR: rgb(51,51,51); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0">< name="com.hongsoft.test.User" table="res_user">
<id name="id" column="id" type="long" unsaved-value="any">
<generator ="assigned">
</generator> 
</id>
<property name="name"/>
<property name="loginName"/>
<property name="passwd"/>
</>






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

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

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: