竟 然64个annotation,没有分类,放在同一个package下,同一个package(javax.persistance)还有其他java文 件,共有88个java文件。不看内容本身,单从表面,都觉得这是混乱不堪的事情。这是那个猪头的杰作?glassfish上下载的源码中,这些java 文件似乎都没有author,估计也不好意思把名字放出来见人吧!

------

觉得对象关系存储方面一直没有突破,也没有好的产品出来,其中一个原因,就是从没有过优秀的工程师投身过这个领域。关系数据库为什么能够一直坚守领地,成为绝大多数商业应用的基石,其中一个原因就是有过大量的精英投身于此,包括两个图灵奖获得者。

关 系数据库,为了描述关系,创造一门SQL语言,将关系一些操作,例如投影(select)、选择(where)、分组(group by)等等,抽象得形象易懂,功能强大。对于数据的操作,SQL语言是最强大,也是最方便的,也是最易于使用的。一些非程序员的IT从业人员,非计算机专 业的人员都能够熟练掌握SQL。

OO和Relational都是伟大的技术,从计算机最高荣誉奖可以看出这两个技术的伟大。OO的图灵奖获得者是三个,Relational的图灵奖获得者是两个。

面向对象技术自1967年simula引进以来,所想披靡,93年-98年从C++开始流行,然后到Java,成为主流编程技术。Relational没有OO那么辉煌,但是在数据存储方面的地位固如磐石,长期占据绝对的地位。

曾 经OO技术涉足于数据存储领域,但终究没有成功。面向对象数据库的变现总是差强人意,面向对象的方式操作数据,总是不如使用关系那么方便,那么灵活,那么 易于使用,那么好的性能。于是人们在数据存储和处理方面,不在青睐面向对象技术,而是仍然使用关系方式,使用SQL语言,使用关系运算操作数据。面向对象 数据库成了昙花一现的东西,并且可能永远都不会再流行了。

OO成了主流编程技术,Relational占据了绝对的数据存储地位,这两大技术需要交互,需要桥接,这需要OR-Mapping。Relational虽然好,但我们也要与时俱进,所以也需要OR-Mapping。

但 是,做OR-Mapping时,不积极吸取relational方式对数据处理的灵活性、方便性、简单性,而只强调Relational和对象之间的的 Mapping,试图以面向对象的方式操作数据,这是错误的方向。以前的EJB、现在Hibernate、JPA都犯了同样的错误,试图以更面向对象的方 式操作数据,从而导致复杂混乱的模型,这也是JPA的现状吧。例如user.getGroup(),目前的ORM试图以纯OO的方式操作数据,所引起的 LazyLoad、n+1等问题,使得事情变得复杂而且混乱不堪。

一些开发人员,去学习Hibernate,不学习SQL,有人提倡,只需要了解面向对象编程技术,不需要了解关系技术,亦属于本末倒置。需求人员都会用的SQL语言,对数据操作最方便最简单最强大的SQL语言,竟然成了令人生畏的纸老虎,可笑啊。

-------------

以下是过去的一些业界浮躁不理智:

1、面向对象数据库。曾被热衷而吹捧,面向对象数据库的变现总是差强人意,面向对象的方式操作数据,总是不如使用关系那么方便,那么灵活,那么易于使用,那么好的性能。于是人们在数据存储和处 理方面,不在青睐面向对象技术,而是仍然使用关系方式,使用SQL语言,使用关系运算操作数据。面向对象数据库成了昙花一现的东西,并且可能永远都不会再 流行了。

2、 JDO投票闹剧。2004-2005年,JDO的JSR在JCP投票被否决的,无聊者在Java社区以及媒体发起闹事,阴谋论其为政治谋杀,几大公司是的 迫于形象,重新投票使得JDO被通过,但JDO这种静态AOP叫雕虫小计式技术,不单开发过程不方便,而且会使得"enhance"之后的代码不可调试。 这完全是对开发者不友好的技术,没有前途的技术,竟然会有人为它在JCP投票不通过鸣不平。这件事情使得我更坚信一点,不要相信那些技术编辑的判断力。

3、 AOP。也是最近这几年流行的一个名词了。起了一个和OOP相似的名字,但是和伟大的OOP相比,它完全不算是什么。AOP只是一种很小很小的技巧而已, 静态的AOP是黑客式的插入代码,会导致代码不可调试,动态的AOP能力有限,AOP最常被引用例子“日志AOP”是不合适,有用的日志通常是精心设计 的,AOP方式的日志在生产环境中基本上是不可用。OO这么多年,这么为伟大,人们总是希望自己能做点什么和伟大的OO相比,于是命名为AOP,这是一个 可笑的名字,前些年还有人谈论面向对象的未来是面向事实,也是同样的可笑。AOP有价值,但它是一种小技巧,和名字不般配。

--------------

目前在流行,但是可能是不理智的技术:

1、hibernate之类的ORM,试图以面向对象方式操作数据,和面向对象数据库一样,重蹈覆辙。
2、Ruby,一个小脚本语言,只是因为动态类型、mixin之类的功能,还没有被证明有生产力,有效益可用的脚本语言,就被媒体吹到天上去。Ruby有价值,但是最终结果会离大家的期待相差甚远。
posted on 2008-02-02 02:56 温少的日志 阅读(5109) 评论(19)  编辑  收藏
Comments
  • # re: JPA这个烂东西
    RoBeRt
    Posted @ 2008-02-02 04:28
    看你对hibernate都不了解
    更被说ruby了 可笑  回复  更多评论   
  • # re: JPA这个烂东西[未登录]
    qqinxl
    Posted @ 2008-02-02 08:19
    Ruby,一个小脚本语言,只是因为动态类型、mixin之类的功能...
    --------------------------------------------------
    这就是你的观点?
    严谨一点吧。
      回复  更多评论   
  • # re: JPA这个烂东西
    再见理想
    Posted @ 2008-02-02 09:05
    看你初学,不说你了。以后这种无知文章不要乱发表,很黄,很暴力啊  回复  更多评论   
  • # re: JPA这个烂东西
    GaoYP
    Posted @ 2008-02-02 09:27
    非常同意作者对ORM的观点。.NET下的Linq在错误的方向上走的更远。用Hibernate或JPA进行复杂的查询和自杀相差无几。我觉的可行的方法是,用Hibernate或JPA作数据的增删改操作,用iBatis作查询。  回复  更多评论   
  • # re: JPA这个烂东西
    dennis
    Posted @ 2008-02-02 09:39
    不了解的东西不要开口
    AOP不能用于生产环境?spring的事务处理就是用AOP实现的,那么世界上这么多在跑的应用都是玩具咯?对于ruby和hibernate的评价就不多说了,不了解的东西不要开口。
    作者是中了OO的毒了  回复  更多评论   
  • # re: JPA这个烂东西
    searchfull
    Posted @ 2008-02-02 09:47
    温少好像没用过hibernate和AOP。
    ORM和关系数据库不是矛盾竞争的关系,是合作的关系。  回复  更多评论   
  • # re: JPA这个烂东西
    dennis
    Posted @ 2008-02-02 09:48
    sorry,看错了,作者是认为AOP式日志是个不恰当的例子,这点我赞成,不过对于AOP技术只是“小技巧”的评价绝不敢苟同。  回复  更多评论   
  • # re: JPA这个烂东西
    杨一
    Posted @ 2008-02-02 10:33
    技术场景不同,归根结底,IT是服务于业务的,当然也有用于纯计算的,不过市场份额不大。对我们没有用的东西不一定对别人也没有用。
    比如说,有人对数据库操作性能要求很高,关系很复杂,数据量很大。那么他可能考虑不用Hibernate而直接用JDBC或其他更底层的方式。就好象操作系统的内核为了效率要使用一部分汇编一样。但是更多的情况可能不是如此。  回复  更多评论   
  • # re: JPA这个烂东西
    BeanSoft
    Posted @ 2008-02-02 10:52
    框架看多了 也会审美疲劳的。。。呵呵,不管啥技术,能给老总带来¥就是好技术。  回复  更多评论   
  • # re: JPA这个烂东西
    Mikecool
    Posted @ 2008-02-02 10:58
    幼稚,Glassfish的JPA包算是JSR规范的reference package,当然没有author

    别的都不说你了,还是老老实实去写两个框架再来评价别人的东西  回复  更多评论   
  • # re: JPA这个烂东西
    keith
    Posted @ 2008-02-02 18:19
    表一棒把人打死,技术本身就它的有优点和缺点的  回复  更多评论   
  • # re: JPA这个烂东西
    flybean
    Posted @ 2008-02-03 08:54
    1)关系型数据库模式的提出和 SQL 语言的发明:

    1970 年 IBM 研究中心的 E.F.Codd 博士提出了关系型的数据库模式,奠定了关系型数据库日后发展的理论基础,并为此于 1981 年荣获计算机科学界的最高荣誉奖 ACM 图灵奖。1973年 IBM 研究中心开始了一个大的关系型数据库系统研究项目 System R,探讨并验证在多用户与大量数据下关系型数据库的实际可行性。在 D.Chamberlin 博士的领导下System R的一个研究小组发明了一套比关系微积分与关系代数更适合最终用户使用的非程序化查询语言 SQL [Chamberlin74,76,80]。从此,基于 SQL 的关系型数据库逐渐成为了数据库管理系统的主流。目前所有的关系型数据库厂家的产品都遵循这一标准。由于 System R 与SQL 对关系型数据库管理系统结构的贡献,其主要设计人员于 1988 年获得了计算机领域中崇高的实用软件系统奖。

    2)分布式数据库概念及对面向对象的支持:

    80年代初期至中期,IBM艾玛登研究中心的研究人员通过System R*研究项目[Lindsay84]探讨分布式数据库的实现技术,其研究成果为日后的分布式关系型数据库架构标准DRDA(Distributed Relational Database Architecture)以及建立数据仓库常用到的数据复制等机制提供了技术来源。

    1984 到 1992 年,IBM艾玛登研究中心开始了一项名为 Starburst 的大型研究计划[Haas90,Lohman91],旨在建立新一代的、具延伸性的关系型数据库原型。所谓延伸性是指数据库各子系统实现开放性,使用户能够很容易地把新功能加注到一个 SQL 关系型数据库里,以便支持新的应用。通过把类似面向对象的抽象数据类型(Abstract Data Type)与继承性(Inheritance)融入 SQL 语言及关系型数据库核心的做法,Starburst容许系统内部与外部的功能被延伸。与此同时 Starburst 研究人员在查询改写优化处理(query rewrite optimization),特别是索引结构(specialized indices),日志预写恢复技术(recovery method based on write-ahead logging),主动数据库技术(active database)等方面皆有创新的贡献。Starburst 的研究项目产生了大量的修正基本数据库结构的文献与专利。如同 System R 推动了 SQL 关系型数据库的商业化一般,Starburst提供了新一代商用对象关系型数据库(Object-relational Database)宝贵的经验与技术来源。

    DB2 在面向对象数据库技术上的发展目标是对象关系型数据库,它是以关系型数据库的架构为基础,加入面向对象的功能。这有别于所谓的 OO Database,OO Database 不是关系型数据库,而是以对象为目的所建立的一种新数据结构。现在计算机科学界以及数据库工业在面向对象的走向方面,是以这种对象关系型数据库为主流。DB2 面向对象的技术及其实施领先群雄。当其它数据库公司还在探讨面向对象技术融入数据库的可能性时,IBM就已在1995 年推出这些最先进的东西。它在新的数据库国际标准(SQL3)的研讨和形成上,也一直处于领导者地位,它完善的 OO 结构已经存在于产品内核里。IBM 正以滚雪球的惊人速度在开发其他更先进的功能,例如对复杂数据的更深层次优化,抽象数据类型(Abstract Data Type)等等。

    对象数据库DB4O应用也比较广泛,虽然目前主要集中在嵌入式应用中.随着技术的发展,理论的发展(关系型数据库理论自其出现以来这么多年已经很成熟\稳定),不排除对象数据库大放异彩的一天.

    不可否认,ORM在增删改的操作上的确可以简化开发量,但对于查询,尤其是复杂查询,还是得通过SQL来完成,并征对不同的数据库进行优化.
      回复  更多评论   
  • # re: JPA这个烂东西
    杭州青鸟
    Posted @ 2008-02-03 12:11
    O/R Mapping是一个伟大的技术,它使程序员可以将大部分精力放在业务逻辑上,而不会为数据库这端的编程有后顾之忧。但是任何技术都不是银弹,可以解决一切问题,hibernate也留了sql query的口子,博主完全可以施展自己在SQL上的超深造诣,何必为了一点的不方便而大放厥词呢?照博主这么说,中国也不要改革开放了,大家一起穷死算了。  回复  更多评论   
  • # re: JPA这个烂东西
    太阳里的雪
    Posted @ 2008-02-03 15:38
    orm肯定不适合那些大型网站,如到时候的分库分表等,显得无能为力。  回复  更多评论   
  • # re: JPA这个烂东西
    海边沫沫
    Posted @ 2008-02-03 18:14
    @太阳里的雪
    谁说的?
    至于分库分表,关键在于设计,和使不使用Hibernate没有关系。  回复  更多评论   
  • # re: JPA这个烂东西
    香草的天空
    Posted @ 2008-02-12 12:50
    楼主我看是把理论和实现混淆了。
    一个东西,理论可能很先进,但是实现起来会有这样那样的问题。
    不过实现的不好不代表这个理论就废掉了。

    现在潮流的大方向是简单化,傻瓜化,提高生产性,降低技术难度。所以hibernate,aop,包括Linq应运而生,这是需求的产物。在大规模开发中,从资金,时间都不可能要求coder们都有很高手的水平,牺牲一定的性能提高开发效率是大势所趋。或许再过10年,就不需要你写什么SQL了,在ER图里拖拖拉拉就可以生成SQL,和现在做网页一样。呵呵。

    hibernate我也看过它的一点源代码。hibernate的优点我看主要是轻量级的封装,它里面的设计也很好,我看起来很轻松。至于HQL,把数据库关联的部分再抽象出来,思路正确,但也不是多复杂的东西。
    对被EJB2.1折磨过的我来说,这样一个简单易用易于二次开发的框架,的确是很满意了。

    其实hibernate和SQL倒没什么对立,只不过把SQL封装了一下。  回复  更多评论   
  • # re: JPA这个烂东西
    香草的天空
    Posted @ 2008-02-12 13:00
    AOP素个好东西,现在的实现上的问题只是因为sun不肯自己去写一个改bytecode的API而已。
    OpenSource里面的东西没有经过严谨的测试自然会有这样那样的问题。
    不过估计sun最后自己会拿一个版本去改个官方的实现。
    至于在大项目中的应用,2005年一个上千人月的项目中就用了。

    AOP也不是OO的竞争伙伴,而是弥补OO的不足。


    现在的框架我觉得也不需要全理解,搞得很高手,很有技巧,因为这种东西一方面还在完善中,一方面新陈代谢很快。应该去理解它的思想,知道他应该干什么,怎么去做。基本就够了。  回复  更多评论   
  • # re: JPA这个烂东西
    83xia
    Posted @ 2008-02-17 12:42
    有意思哦  回复  更多评论   
  • # re: JPA这个烂东西
    垃圾
    Posted @ 2009-02-27 12:05
    我只能说你是井底之蛙!  回复  更多评论   

只有注册用户登录后才能发表评论。


网站导航: