`
cm4ever
  • 浏览: 5186 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

沉重的负担-Hibernate的反模式

阅读更多
前言 虽然Hibernate作为最早流行的轻量级ORM,java社区的头号杀手应用,给数据库软件开发带来极大的便利和影响,但是在长期的实践中,仍觉得有些场景比较笨重,使用起来不甚顺手,遂发发牢骚。 虽然本人有能力解决这些问题,也提到了以前开源的扩展模块,但并非刻意宣传,因为对第3个模式的不满致使我决定放缓对hibernate的修改,除非有外力支持,比如所在公司支持或者网友支持。 题外话,我正在抽空写以COM、XPCOM为基础的orm,语言是C++。COM可以实现反射功能,恰好用来写ORM,成品可以供支持COM的开发工具使用,也可以在js中使用,js中的orm不是梦想,当然各大论坛有些网友说用纯js写orm也是个可行的办法,确实值得一试,不过访问数据库的组件还是得用c/c++之类的来写,这个跑不掉。 反模式1:不支持模块化配置文件 问题场景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-hibernate1-5.zip

    达梦数据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

    本篇将详细介绍标题为"DmDialect-for-hibernate4.0.zip"的压缩包文件及其包含的两个重要组件:Dm7JdbcDriver17.jar和DmDialect-for-hibernate4.0.jar,以及它们在SpringBoot项目中的作用。 首先,SpringBoot是一个...

    spring-hibernate.jar

    spring-hibernate.jar

    DmDialect-for-hibernate5.3-5.3.jar

    国产达梦数据库hibernate方言包

    Middlegen-Hibernate-r5

    本文将深入探讨Middlegen-Hibernate-r5这一版本,揭示它们如何协同工作,为开发者带来便利。 一、Middlegen简介 Middlegen是一款基于Ant的任务,能够从数据库模式生成Hibernate的元数据XML文件,这些文件包含了...

    JavaEE源代码 spring-hibernate3

    JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-hibernate3JavaEE源代码 spring-...

    hibernate-extensions和Middlegen-Hibernate

    《hibernate-extensions与Middlegen-Hibernate:数据库到Java对象的自动化转换》 在Java的持久化层开发中,Hibernate作为一款强大的ORM(对象关系映射)框架,极大地简化了数据库操作。然而,手动编写实体类和映射...

    dao-hibernate.jar

    dao-hibernate.jardao-hibernate.jardao-hibernate.jardao-hibernate.jardao-hibernate.jar

    Middlegen-Hibernate-r5,hibernate-extensions-2.1.3

    【标题】"Middlegen-Hibernate-r5,hibernate-extensions-2.1.3" 涉及的是两个重要的Hibernate相关工具:Middlegen和Hibernate Extensions,这两个工具都是在开发基于Java的数据库应用程序时使用的辅助工具。...

    xjar-agent-hibernate-v1.0.0.jar

    xjar-agent-hibernate-v1.0.0.jar下载

    spring-hibernate3.jar.zip

    对于复杂的业务逻辑,Spring的DAO层和Service层设计模式可以帮助我们将数据访问逻辑和业务逻辑分离,提高代码的可读性和可维护性。 总的来说,"spring-hibernate3.jar"是一个便捷的集成解决方案,它使得Spring和...

    spring-hibernate 4个版本

    标题中的“spring-hibernate 4个版本”指的是四个不同阶段的Spring与Hibernate集成框架的版本。Spring是一个广泛使用的Java企业级应用开发框架,而Hibernate是一个流行的持久化框架,用于简化数据库操作。这两个库的...

    Hibernate-Extension Middlegen-Hibernate

    1. **安装配置**:首先,你需要下载并配置Middlegen-Hibernate的相关依赖库,如题目中提到的`hibernate-extensions-2.1.3`、`apache-ant-1.8.4`、`Middlegen-Hibernate-r5`和`hibernate-2.1`。Apache Ant是Java项目...

    达梦数据库java驱动包、hibernate方言包

    /*************************************** * 达梦8 JDBC驱动版本说明 /*************************************** ...8. DmDialect-for-hibernate5.3.jar 对应 Jdk1.7及以上, hibernate5.3 -- 5.4 环境

    spring-hibernate3.jar

    spring-hibernate3.jar 非常好用,请多支持!

    maven-hibernate3-jdk14-2.0.jar

    maven-hibernate3-jdk14-2.0.jar

    jackson-datatype-hibernate, 用于处理Hibernate的Jackson JSON处理器模块( http,Add.zip

    jackson-datatype-hibernate, 用于处理Hibernate的Jackson JSON处理器模块( http,Add 构建 Jackson 模块( jar ) 以支持JSON序列化和反序列化 Hibernate ( http://hibernate.org ) 特定数据类型和属性,特别是延迟...

Global site tag (gtag.js) - Google Analytics