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

豆豆网   技术应用频道   2007年10月29日  【字号: 收藏本文

内容摘要:Hibernate非常简单易学,目前国内有很多同行已经或正在用Hibernate开发实施项目;但Hibernate有很多规则不为人知或应用甚少。本文的目的就是将这些规则归纳总结,希望对您的开发和设计有益。

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

<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映射的容易理解错误的知识点的归纳总结,希望对您有帮助。

责编:豆豆技术应用

正在加载评论...