hibernate的缺点我感觉是因人而异的,下面谈谈我个人想法。
虽然XML相当强大,但是我认为它也有一定的适用范围,尤其复杂XML的编制,已经如同编制程序代码,编制程序代码我现在如果没有Jbuilder的语法提示,我早就变成了痴呆,因为我感觉脑子精力是放在refactoring以及代码重用性提取上,所以我做程序,经常重整,最后会形成一个小框架,这些我认为是我的财富,我认为我的重点应该放在这上面,否则,项目做了很多,感觉什么都没得到。
所以,我喜欢图形化编辑工具,我喜欢自动提示的编程环境,但是现在编制复杂的XML,我感觉又一次落入无人访问的荒漠,当然XML编程环境正在成熟,但是如何根据schema来实行自动提示,我想还有一段时间。
简单地用用Hibernate感觉很简单,但是要实现复杂的使用,如一对多或多对多关系,需要编制我认为复杂的xml语句,我有恐惧感,我的经验告诉出错可能性很高,需要Schema手册时刻在心中。
这是一点,Hibernate复杂功能过于依赖XML,虽然JAVA代码减少编制了,但是XML代码编制工作量复杂了。
第二点,Hibernate的HQL是很强大,但是复杂功能过于依赖HQL,HQL是什么,是字符串,是metaData,过去我们是从汇编走过来,难道我们还要复兴它,我用了2年的Perl或Php这样脚本,放弃它就是它是过于字符串,一个字符的大小写错误和空格影响整个系统的重要功能,我不想让系统充满这种风险。
Hibernate是一个好的ORM产品,但是JDO 2.0正在加紧制定,相信所有的ORM产品最终给人是一种完全面向对象语言级别的,可伸缩的强大工具,可伸缩很重要,对于简单应用它也能方便使用,对于复杂应用它同样方便使用。
1、Hibernate的hbm配置真的很复杂吗?
我不觉得,我还从来不用工具来生成hbm,都是手工来写,一边写一边查看Hibernate的手册就够了,很简单阿,你怎么会觉得难?说到写Java代码,我用的是UltraEdit,一个字母一个字母的敲,Java的类都是见名知意的,而且命名非常规范,记住并不困难。看来你已经被工具宠坏了。
2、Hibernate的强大并不是因为HQL
Hibernate强大在它灵活多变的以各种对象方式来映射数据库,我上面反复的提,这才是它的精华。说实话,我用Hibernate,我根本写不出像Hibernate文档里面那么复杂的HQL出来,因为实在是用不上。HQL的强大只是给你提供了一种解决问题的方法,不是强迫你非用不可,难道HQL强大反到成了Hibernate的缺点?如果要实现Hibernate很复杂的功能,根本就不依赖HQL,而是依赖你用Hibernate精巧的设计对象持久层,这一点,看看Hibernate网站上面的Design Pattern会有很启发。
3、完全面向对象谈何容易?
Java语言自己都不是完全面向对象,有什么道理要求Hibernate也是完全面向对象?
4、可伸缩性
我恰好很欣赏Hibernate的这一点。不论简单应用还是复杂应用一样不在话下。另外Hibernate可扩展性也特别好,如果你需要的功能Hibernate不具备,你甚至可以自己写接口实现类来扩展Hibernate的功能。
我还真的希望有谁能找几个让我心服口服的缺点出来,可惜现在还没有等到。
我的理解是banq的perl/php这样的script脚本语言缺乏测试工具。如果系统拥有完整的测试代码(java工程中,使用junit进行基本的功能测试,比较深入人心了),就不会有“不想让系统充满这种风险”这种想法。因为你的风险在daily build和daily test中已经被排除了。
总之,这是项目管理而非hibernate的问题。
HQL跟.NET里面的ADO.NET对SQL语句的处理方式类似,但是更简洁,可以很容易的封装起来做成一个通用查询模块
对我这个SQL语言白痴,以及极其讨厌JDBC传统SQL语言书写方式的懒人来说,这个东西简直就是天上掉馅饼
现在一个没有用EJB的项目正在用Hibernate,感觉很爽。
能够更多的实现cache的管理。比如说,可以让程序员手工指令去分类实效。出现这种需求的原因在于在一些使用无法替代的stored procedure的老系统中,或者由于某种原因不得不进行外部数据库更新的情形下,此时hibernate无法得知数据库实际数据与内存中已经不一致,我只有令内存数据失效。而如果我能够指令其实效部分内容(比如某几个特定的类的实例),就可以处理这种情况。
至于hibernate的缺点,站在产品成熟度而非理论架构的角度来讲,是它的外围产品没有做好。TopLink是一个完整的产品线,包含GUI和各种document,当然与hibernate的外围产品的不完善不可同日而语。假设有一个eclipse插件,能够参考hbm的定义,帮助你使用code complete编写HQL,就会非常幸福了。
各位如果有兴致,而且也想帮助hibernate的推广,同时也提高自己的水平,翻译hibernate的文档吧。嘿嘿。2xx页。约1~2人月的业余时间即可完成。
在csdn也有不少翻译的文章,评论不是很好。
不过我支持,毕竟我也懒得看英文。
persistence和db数据一致性的问题, 一般都是用transaction和version number去处理.
要实时保持数据同步是很耗系统资源的, 我们曾用做过一个基于oracle的数据实时同步系统. 系统用socket传递消息, 用dcom来传递数据对象, 数据库, 中间服务器和客户端数据一致. 但中间服务器最多挂30个客户端. 所以只能采用多级服务器来分担负载.
我认为真正需要的是一本写的很好的Hibernate教程,除了把Hibernate本身的配置,调用方法这些最基本的东西进行介绍之外,应该把重点放在如何运用Hibernate进行对象持久层的设计上来,从这样的角度来写书,读者能够得到比单单学习Hibernate更多的东西。
Hibernate的使用方法可以比较简单的介绍,或者直接翻译文档,但是要把怎么运用Hibernate这些内容编写好,是很花功夫的,要求作者本身对Hibernate非常精通,而且有非常丰富的设计经验才行,另外就是需要花大量的时间去写作,去准备例程,我曾经有过想写Hibernate方面书的想法,但是没有勇气去写。