注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> 开源技术 >> Hibernate >> Java正文

Hibernate已经落伍了吗?

文章来源:赛迪网 作者:baocl 更新时间:2008-8-23 14:41:00 【 】 【加入收藏

    在Java世界,Hibernate是最引人关注的一个话题。从Gavin King加入EJB3.0 EG,负责制订EJB3.0的持久层规范;到Gavin King非正式退出JDO EG,并且充满个人情绪的攻击JDO2.0规范;到《Hibernate in Action》的发行;再到Hibernate3 Alpha的发布;最后再到最近JBoss 3.0 PR的发布(使用Hibernate3实现Entity Bean)。可以说这其中的每一步都引起业界的侧目。

    Hibernate在不到3年的时间里,从一个不起眼的开源软件发展到今天令业界瞩目的主流O/R Mapping框架,Gavin King从一个开源软件的作者成为业界举足轻重的人物,这多少有些传奇的色彩。毕竟,单纯从技术成就而言,Hibernate不算是最有成就的Java开源框架软件,到目前为止也不是一个完美无缺的软件;从个人技术水平而言,Gavin King也不算绝顶高手。

    在当前的Java持久层框架中,最流行的O/R Mapping产品分别是Hibernate,JDO和TopLink.

    自从去年Gavin King加入JBoss之后,Hibernate已经由一个民间的开源软件走上了兼容EJB EntityBean的道路。然而更加令人侧目的是,Gavin King在EJB3.0 EG中充当了一个非常重要的角色,只要对比一下EJB3.0的EntityBean和Hibernate3,真相就会大白,虽然API接口不同,但是 EntityBean的设计理念完全来自于Hibernate.

    虽然EJB3.0的EntityBean在相当程度上来源于Hibernate,但是毕竟是不同的API接口,因此Hibernate和EJB3.0 EntityBean究竟是怎样的一种关系,是很多人心中的疑问。

    2004 年四月份JBoss的Ben Wang访华期间,我曾经向Ben请教Hibernate的未来发展,他回答说,Hibernate未来将仍旧以独立的软件产品存在和发展,既可以 outside EJB container使用;同时Hibernate也将做为JBoss EntityBean Implementation,又可以inside EJB container使用。然而如何既inside,又outside,终究缺乏一个感性的认识。

    10月8日JBoss发布的 EJB3.0 PR揭开了答案。从Sourceforge的CVS服务器上面checkout出来源代码看一下,我们可以发现,Gavin King对Hibernate3进行了简单的封装,将EJB 3.0 EntityBean API调用转换为内部Hibernate3自己的API,从而实现EJB3.0 EntityBean的兼容。

    EJB3.0 不承诺脱离容器调用,如果你想享用EJB3.0,则必须运行在某个EJB Vendor提供的容器内,例如你使用JBoss提供的容器,那么你调用的是EntityBean API,这些调用请求会被转换为Hibernate API的调用请求。这意味着Hibernate实际上提供了两套API:一套是Hibernate原生API;另一套是兼容EJB3.0 EntityBean API.对于那些需要分布式调用支持,需要EJB容器的开发人员来说,他们选择后一套API;对于不需要EJB容器的开发人员来说,他们选择前一套 API.这就是Hibernate既定的发展策略。

    今年夏天投票通过的JDO2.0标准从某种程度而言,并不逊色于 Hibernate当前的版本,有些功能甚至比Hibernate还要好,例如 JDO支持对类属性的lazy loading,而Hibernate要到3才支持,当前Hibernate仅仅支持类的lazy loading.实际上在去年,就已经有很多用户不断提出对类属性的lazy loading的需求,然而Gavin King当时一直不认为这个需求有添加的必要性。再例如被Gavin King形容为“可憎的”JDOQL,实际上是类SQL查询语言和对象条件查询的混合体。从功能上来说,不如HQL强大,但是比Hibernate自己的条件查询强。

    不知道究竟出于什么原因,Gavin King对JDO似乎一直怀有由衷的厌恶,5月,他在Hibernate的blog上面对JDO进行了毫不留情的批判,列举了JDO的种种缺点来解释为什么EJB3持久层规范没有把JDO考虑进去。然而事实上他的批判充满了对JDO的误解和偏见,例如Gavin King憎恨JDOQL丝毫没有什么特别的理由,只因为JDOQL不是一个纯粹的查询语言,而是一个混合体,这多少让人对Gavin King的风度感到遗憾。在被Solarmetric的Abe White反驳之后,同样没有风度的说,“我可没有时间做这种无谓的争论,事实上每个人都认为他自己的技术是最好的……我是错了,JDO那伙人也错了,每个人都会犯错误……”。(所以说人无完人!)

    JDO2规范的出台事实上构成了对Hibernate,乃至基于 Hibernate理念的EJB3.0 EntityBean的严重威胁。JDO1.0规范在功能上的严重缺失导致了JDO无力面对Hibernate和TopLink的竞争,然而功能基本完备的JDO2挟众多JDO Vendor商业支持的合力,同时JDO规范可以避免产品锁定在某个Vendor的优势,已经将竞争的天平拉直。

   

  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     Flash、HTML、Ajax 谁将赢得Web应用之战
     超越XML和JSON:YAML,Java开发人员的新选择
     优秀Java程序员必须了解的GC工作原理
     Java 6 RowSet 使用完全剖析
     pureQuery带注释的方法风格简介
     面向Java开发人员的Scala指南: 实现继承
     Java 6中的性能优化
     Java实现Windows的dir命令
     Java标准类库提供的容器总结
     在Tomcat上开发Web应用如何保证兼容性
    最 新 推 荐
     Hibernate开发者中好的软件开发理念
     Hibernate已经落伍了吗?
     开源框架Hibernate3的新特性以及发展趋势
     Hibernate利用XDoclet自动生成配置文件
     Hibernate分页可能引起的性能问题
     Hibernate实现DAO的常用CRUD操作
     hibernate 深入学习小结
     如何提高hibernate性能
     从Hibernate的映射谈编程思想
     JSF和Hibernate的比较
    相 关 文 章

    Spring的IoC学习笔记之BeanFactoryPostProc…
    关于iBatis和Spring的整合
    使用SpringtUtil获取Spring IoC容器中的Bea…
    基于Spring+Ibatis的安全线程实现
    Hibernate开发者中好的软件开发理念
    开源框架Hibernate3的新特性以及发展趋势
    Hibernate利用XDoclet自动生成配置文件
    Hibernate分页可能引起的性能问题
    Hibernate实现DAO的常用CRUD操作
    hibernate 深入学习小结

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用