﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-hj246-文章分类-Hibernate学习心得</title><link>http://www.blogjava.net/hj246/category/5025.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 03 Mar 2007 08:55:09 GMT</lastBuildDate><pubDate>Sat, 03 Mar 2007 08:55:09 GMT</pubDate><ttl>60</ttl><item><title>Hibernate O/R映射三大基本定则</title><link>http://www.blogjava.net/hj246/articles/20463.html</link><dc:creator>天一良品</dc:creator><author>天一良品</author><pubDate>Fri, 18 Nov 2005 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/hj246/articles/20463.html</guid><wfw:comment>http://www.blogjava.net/hj246/comments/20463.html</wfw:comment><comments>http://www.blogjava.net/hj246/articles/20463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hj246/comments/commentRss/20463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hj246/services/trackbacks/20463.html</trackback:ping><description><![CDATA[<BR>定则一:数据库配置文件名称可以不是Hibernate.properties或Hibernate.cfg.xml<BR><BR>由于Hibernate官方文档(本文指www.hibernate.org的文档)的影响,很多Hibernate开发者误以为系统一定要有名称为Hibernate.properties或Hibernate.cfg.xml的文件,而且一定要放在classes的根目录下。实际上,该文件只是一般的配置文件,名称可以自己取,文件位置可以自己定,而且在多数据库环境下,可以有多个配置文件,使得程序可以连接多个数据库。只是您在创建会话工厂时需要特殊处理,代码示例如下:<BR><BR>//配置文件名称<BR><BR>protected static String CONFIG_FILE = "my_hibernate.config";<BR><BR>//配置文件目录,可以考虑在该目录下存放系统所有配置文件,此处使用虚拟机参数<BR><BR>String configPath = System.getProperty("my.config"); <BR><BR>//创建会话工厂 <BR><BR>sessionFactory =( new Configuration().configure(new File(configPath+File.separator+CONFIG_FILE))) .buildSessionFactory();<BR><BR>定则二:小型项目中,.hbm.xml文件可以合并到一个文件中<BR><BR>同样由于Hibernate官方文档的影响,很多Hibernate开发者误以为Hibernate的对象关系映射一定要一个表对应一个对象,并将映射文件和对象文件放在同一目录下。实际上,该模式是为规范性考虑而设计的,因为在多人参与的项目中,多人要维护同一文件容易产生冲突;当项目比较小时,配置文件的维护人员少,我们完全可以将.hbm.xml文件合并到一个或者几个文件中。依据作者本人的项目设计开发经验,最好是项目中有几人同时从事O/R映射和持久工作,则设定几个.hbm.xml文件,每人维护一个。当然,为了便于分类和管理,每人的工作应该按逻辑划分。<BR><BR>大型项目中的文件配置示例如下:<BR><BR>&lt;hibernate-configuration&gt;<BR><BR>&lt;session-factory&gt;<BR><BR>&lt;!—映射文件分散 --&gt;<BR><BR>&lt;mapping resource="com/hongsoft/test/ persistence/Cat.hbm.xml"/&gt;<BR><BR>&lt;mapping resource="com/hongsoft/test/ persistence/Animal.hbm.xml"/&gt;<BR><BR>&lt;/session-factory&gt;<BR><BR>&lt;/hibernate-configuration&gt;<BR><BR>小型项目中的文件配置示例如下:<BR><BR>&lt;hibernate-configuration&gt;<BR><BR>&lt;session-factory&gt;<BR><BR>&lt;!—映射文件集中 --&gt;<BR><BR>&lt;mapping resource="res_hibernate_map.xml"/&gt;<BR><BR>&lt;/session-factory&gt;<BR><BR>&lt;/hibernate-configuration&gt;<BR><BR>要注意的是, 从对Hibernate源代码的分析可知,指定映射文件时,不能用绝对目录,只能用相对目录;而且,系统以classes根目录为当前目录。 
<P><BR>定则三:对象关系映射是以.hbm.xml文件为基准的,而不是以PO文件为基准<BR><BR>该定律的意思是:系统启动检查您的对象关系映射是否正确时,是以.hbm.xml为基准来进行检查的;对象文件的property可以比映射文件的property多,但不能少。如果您有如下的映射:<BR><BR>&lt;class name="com.hongsoft.test.User" table="res_user"&gt;<BR><BR>&lt;id name="id" column="id" type="long" unsaved-value="any"&gt;<BR><BR>&lt;generator class="assigned"&gt; <BR><BR>&lt;/generator&gt; <BR><BR>&lt;/id&gt;<BR><BR>&lt;property name="name"/&gt; <BR><BR>&lt;property name="loginName"/&gt;<BR><BR>&lt;property name="passwd"/&gt; <BR><BR>&lt;/class&gt;<BR><BR>系统启动,检查数据库和其他配置正确后,将以该文件为基准,首先检查User对象中有无id属性和对应的get/set方法,如果没有则报错,如果有且正确则检查有无name属性和对应的get/set方法……,直到文件结束。要注意的是,如果属性为name,则get方法名称必须为getName(),set方法名称必须为setName(),否则会报错。<BR><BR>如果User对象除了有id,name,loginName, passwd四个属性和对应的方法,还有其它的属性和方法,会报错吗?不会,因为对象关系映射是以.hbm.xml文件为基准的,而不是以PO文件为基准。您在项目中可以充分利用该特点,实现您自己的比较特殊的需求。例如,您可以在User对象中加入updatedPasswd表示更改后的口令,由此构造在表示层要使用的FormBean和在业务层要使用的ValueObject。当然,这样做也有缺点,需要根据您的实际情况而定。<BR></P><img src ="http://www.blogjava.net/hj246/aggbug/20463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hj246/" target="_blank">天一良品</a> 2005-11-18 17:17 <a href="http://www.blogjava.net/hj246/articles/20463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>