前言
虽然Hibernate作为最早流行的轻量级ORM,java社区的头号杀手应用,给数据库软件开发带来极大的便利和影响,但是在长期的实践中,仍觉得有些场景比较笨重,使用起来不甚顺手,遂发发牢骚。
本文意在抛砖引玉,如果你也有类似牢骚和解决方案,不如也发出来共享一下。
虽然本人有能力解决这些问题,也提到了以前开源的扩展模块,但并非刻意宣传,因为对第3个模式的不满致使我决定放缓对hibernate的修改,除非有外力支持,比如所在公司支持或者网友支持。
题外话,我正在抽空写以COM、XPCOM为基础的orm,语言是C++。COM可以实现反射功能,恰好用来写ORM,成品可以供支持COM的开发工具使用,也可以在js中使用,js中的orm不是梦想,当然各大论坛有些网友说用纯js写orm也是个可行的办法,确实值得一试,不过访问数据库的组件还是得用c/c++之类的来写,这个跑不掉。
反模式1:不支持模块化
像struts,可以将Action配置写到其他xml文件,然后再struts-config.xml里引用这些xml文件达到模块化的作用。
问题场景1:
当多个开发人员同时将几百个mapping标签写到hibernate.cfg.xml里面,而且还在不断增加的时候,文件冲突就是家常便饭。
建议解决方案:
直接修改hibernate,2年前俺在hbn-dyn-mod的第2个功能就这么做来着,但是经常加班加到熊猫样,还是业余时间搞的,又没有得到领导的支持,而且hbn-dyn-mod第1个功能开源后没什么人反响,所以连在sourceforge上更新的热情都没了,最后,连硬盘里的代码都丢失了...
问题场景2:
Hibernate.cfg.xml经常改动,在cvs,svn经常update,如果数据库名称和密码不同,可有得受了...
建议解决方案:
手工改改。
或者先读取hibernate.cfg.xml到内存中,从其他文件获取本机的数据库名和密码,并修改到内存中的hibernate.cfg.xml,然后再用修改后的内容启动Configuration,这样一劳永逸。
反模式2:不支持延迟加载映射文件
本来某段时间只专注一个模块的开发,但是做个单元测试也要等全部xxx个映射文件加载完毕,时间和内存消耗让本就不多的系统资源捉襟见肘,他就没有选项支持直到调用Session.get, load, save, createQuery.list等api时才读取对应的.hbm.xml吗?这也就算了,要是其他模块的开发者上传了一个错误的.hbm.xml或者持久化类,那就连运行都免了...
建议解决方案:
暂时屏蔽出错的模块对应的Mapping标签。
另外Hibernate2的话,可以试试hbn-dyn-mod。
反模式3:两套DOM模型
Org.hibernate.mapping包里的类,在Configuration里使用,可以完整的对应.hbm.xml里所有的信息,到了SessionFactory,就只能拿到org.hibernate.metadata.ClassMetaData了,其他几个模型类分散到其他包里,而且还不提供SessionFactory.getConfiguration方法,也太绝了点吧...
而且ClassMetaData的用法我实在搞不懂,也懒得研究。
建议解决方案:
懒得想,直接修改源码,给SessionFactory添加getConfiguration方法。
反模式4:不支持动态重载映射文件和持久化类
这个要求高了点,见仁见智了,由于jvm的局限性,估计有些人因此而转向了更灵活的python或ruby。当然,我可以解决这个问题,8过正如开头所说的原因,现在对修改hibernate没兴趣。
分享到:
相关推荐
达梦数据DmDialect-for-hibernate所有jar包,DmDialect-for-hibernate2.0、DmDialect-for-hibernate2.1、DmDialect-for-hibernate3.0、DmDialect-for-hibernate3.1、DmDialect-for-hibernate3.6、DmDialect-for-...
本篇将详细介绍标题为"DmDialect-for-hibernate4.0.zip"的压缩包文件及其包含的两个重要组件:Dm7JdbcDriver17.jar和DmDialect-for-hibernate4.0.jar,以及它们在SpringBoot项目中的作用。 首先,SpringBoot是一个...
spring-hibernate.jar
国产达梦数据库hibernate方言包
本文将深入探讨Middlegen-Hibernate-r5这一版本,揭示它们如何协同工作,为开发者带来便利。 一、Middlegen简介 Middlegen是一款基于Ant的任务,能够从数据库模式生成Hibernate的元数据XML文件,这些文件包含了...
JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-...
《hibernate-extensions与Middlegen-Hibernate:数据库到Java对象的自动化转换》 在Java的持久化层开发中,Hibernate作为一款强大的ORM(对象关系映射)框架,极大地简化了数据库操作。然而,手动编写实体类和映射...
dao-hibernate.jardao-hibernate.jardao-hibernate.jardao-hibernate.jardao-hibernate.jar
【标题】"Middlegen-Hibernate-r5,hibernate-extensions-2.1.3" 涉及的是两个重要的Hibernate相关工具:Middlegen和Hibernate Extensions,这两个工具都是在开发基于Java的数据库应用程序时使用的辅助工具。...
xjar-agent-hibernate-v1.0.0.jar下载
对于复杂的业务逻辑,Spring的DAO层和Service层设计模式可以帮助我们将数据访问逻辑和业务逻辑分离,提高代码的可读性和可维护性。 总的来说,"spring-hibernate3.jar"是一个便捷的集成解决方案,它使得Spring和...
标题中的“spring-hibernate 4个版本”指的是四个不同阶段的Spring与Hibernate集成框架的版本。Spring是一个广泛使用的Java企业级应用开发框架,而Hibernate是一个流行的持久化框架,用于简化数据库操作。这两个库的...
1. **安装配置**:首先,你需要下载并配置Middlegen-Hibernate的相关依赖库,如题目中提到的`hibernate-extensions-2.1.3`、`apache-ant-1.8.4`、`Middlegen-Hibernate-r5`和`hibernate-2.1`。Apache Ant是Java项目...
/*************************************** * 达梦8 JDBC驱动版本说明 /*************************************** ...8. DmDialect-for-hibernate5.3.jar 对应 Jdk1.7及以上, hibernate5.3 -- 5.4 环境
spring-hibernate3.jar 非常好用,请多支持!
maven-hibernate3-jdk14-2.0.jar
jackson-datatype-hibernate, 用于处理Hibernate的Jackson JSON处理器模块( http,Add 构建 Jackson 模块( jar ) 以支持JSON序列化和反序列化 Hibernate ( http://hibernate.org ) 特定数据类型和属性,特别是延迟...