引言
在Java环境下有多种对象关系映射方法如实体BeanOJBJDOJDBC等Hibernate是一种新的O/R映射工具它不仅提供了从Java类到数据表的映射也提供了数据查询和恢复等机制Hibernate非常简单易学目前国内有很多同行已经或正在用Hibernate开发实施项目但Hibernate有很多规则不为人知或应用甚少本文的目的就是将这些规则归纳总结希望对您的开发和设计有益
首先声明本文是Hibernate入门级文章高手请不用往下看了
基本定则
定则一数据库配置文件名称可以不是Hibernateproperties或Hibernatecfgxml
由于Hibernate官方文档(本文指的文档)的影响很多Hibernate开发者误以为系统一定要有名称为Hibernateproperties或Hibernatecfgxml的文件而且一定要放在classes的根目录下实际上该文件只是一般的配置文件名称可以自己取文件位置可以自己定而且在多数据库环境下可以有多个配置文件使得程序可以连接多个数据库只是您在创建会话工厂时需要特殊处理代码示例如下
//配置文件名称
protected static String CONFIG_FILE = nfig
//配置文件目录可以考虑在该目录下存放系统所有配置文件此处使用虚拟机参数
String configPath = SystemgetProperty(nfig)
//创建会话工厂
sessionFactory =( new Configuration()configure(new File(configPath+Fileseparator+CONFIG_FILE))) buildSessionFactory()
定则二小型项目中hbmxml文件可以合并到一个文件中
同样由于Hibernate官方文档的影响很多Hibernate开发者误以为Hibernate的对象关系映射一定要一个表对应一个对象并将映射文件和对象文件放在同一目录下实际上该模式是为规范性考虑而设计的因为在多人参与的项目中多人要维护同一文件容易产生沖突当项目比较小时配置文件的维护人员少我们完全可以将hbmxml文件合并到一个或者几个文件中依据作者本人的项目设计开发经验最好是项目中有几人同时从事O/R映射和持久工作则设定几个hbmxml文件每人维护一个当然为了便于分类和管理每人的工作应该按逻辑划分
大型项目中的文件配置示例如下
<hibernateconfiguration>
<sessionfactory>
<!—映射文件分散 >
<mapping resource=com/hongsoft/test/ persistence/Cathbmxml/>
<mapping resource=com/hongsoft/test/ persistence/Animalhbmxml/>
</sessionfactory>
</hibernateconfiguration>
小型项目中的文件配置示例如下
<hibernateconfiguration>
<sessionfactory>
<!—映射文件集中 >
<mapping resource=res_hibernate_mapxml/>
</sessionfactory>
</hibernateconfiguration>
要注意的是 从对Hibernate源代码的分析可知指定映射文件时不能用绝对目录只能用相对目录而且系统以classes根目录为当前目录
定则三对象关系映射是以hbmxml文件为基准的而不是以PO文件为基准
该定律的意思是系统启动检查您的对象关系映射是否正确时是以hbmxml为基准来进行检查的对象文件的property可以比映射文件的property多但不能少如果您有如下的映射
<class name=comhongsofttestUser table=res_user>
<id name=id column=id type=long unsavedvalue=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对象除了有idnameloginName passwd四个属性和对应的方法还有其它的属性和方法会报错吗?不会因为对象关系映射是以hbmxml文件为基准的而不是以PO文件为基准您在项目中可以充分利用该特点实现您自己的比较特殊的需求例如您可以在User对象中加入updatedPasswd表示更改后的口令由此构造在表示层要使用的FormBean和在业务层要使用的ValueObject当然这样做也有缺点需要根据您的实际情况而定
总结
上面是作者对Hibernate映射的容易理解错误的知识点的归纳总结希望对您有帮助如果您发现有错误或有自己的观点欢迎讨论