Robin,我觉得你可以考虑做一个,或许Hibernate的作者不擅长Swing。
你太高估我了,我没有这样的水平。而且我也不太懂Swing。
Hibernate是好东西,当然也有缺点,Jdon论坛是开放论坛,技术观点百家争鸣是最好的了(技术以外少谈)。

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的功能。


我还真的希望有谁能找几个让我心服口服的缺点出来,可惜现在还没有等到。

说到XML配置文件,我用的也算很多了。自己的程序也经常用XML格式来写配置文件,另外经常写ant的build的XML脚本,复杂的也有用Web Services的时候的WSDL,不过这些还都算很简单的了。就是那个CMP的XML部署描述符对我来说是一个噩梦,是我平生唯一不得不借助IDE工具才写的出来的XML。
>第二点,Hibernate的HQL是很强大,但是复杂功能过于依赖HQL,HQL是什么,是字符串,是metaData,过去我们是从汇编走过来,难道我们还要复兴它,我用了2年的Perl或Php这样脚本,放弃它就是它是过于字符串,一个字符的大小写错误和空格影响整个系统的重要功能,我不想让系统充满这种风险。

我的理解是banq的perl/php这样的script脚本语言缺乏测试工具。如果系统拥有完整的测试代码(java工程中,使用junit进行基本的功能测试,比较深入人心了),就不会有“不想让系统充满这种风险”这种想法。因为你的风险在daily build和daily test中已经被排除了。
总之,这是项目管理而非hibernate的问题。

偶觉得Hibernate的XML文件几乎是它的精华之一了,上可生成java文件,下可生成数据库,写起来倒算不上复杂的,用eclipse+colorery library就搞定了,没找到一个合适的XML assistant plugin,不然就更加简单了

HQL跟.NET里面的ADO.NET对SQL语句的处理方式类似,但是更简洁,可以很容易的封装起来做成一个通用查询模块

对我这个SQL语言白痴,以及极其讨厌JDBC传统SQL语言书写方式的懒人来说,这个东西简直就是天上掉馅饼

现在一个没有用EJB的项目正在用Hibernate,感觉很爽。

我对hibernate的期望:
能够更多的实现cache的管理。比如说,可以让程序员手工指令去分类实效。出现这种需求的原因在于在一些使用无法替代的stored procedure的老系统中,或者由于某种原因不得不进行外部数据库更新的情形下,此时hibernate无法得知数据库实际数据与内存中已经不一致,我只有令内存数据失效。而如果我能够指令其实效部分内容(比如某几个特定的类的实例),就可以处理这种情况。

至于hibernate的缺点,站在产品成熟度而非理论架构的角度来讲,是它的外围产品没有做好。TopLink是一个完整的产品线,包含GUI和各种document,当然与hibernate的外围产品的不完善不可同日而语。假设有一个eclipse插件,能够参考hbm的定义,帮助你使用code complete编写HQL,就会非常幸福了。

各位如果有兴致,而且也想帮助hibernate的推广,同时也提高自己的水平,翻译hibernate的文档吧。嘿嘿。2xx页。约1~2人月的业余时间即可完成。

Hibernate确实很全,但要翻译,呵呵,很难达到符合大众的胃口,
在csdn也有不少翻译的文章,评论不是很好。

不过我支持,毕竟我也懒得看英文。

/*能够更多的实现cache的管理。比如说,可以让程序员手工指令去分类实效。出现这种需求的原因在于在一些使用无法替代的stored procedure的老系统中,或者由于某种原因不得不进行外部数据库更新的情形下,此时hibernate无法得知数据库实际数据与内存中已经不一致,我只有令内存数据失效。而如果我能够指令其实效部分内容(比如某几个特定的类的实例),就可以处理这种情况。*/

persistence和db数据一致性的问题, 一般都是用transaction和version number去处理.
要实时保持数据同步是很耗系统资源的, 我们曾用做过一个基于oracle的数据实时同步系统. 系统用socket传递消息, 用dcom来传递数据对象, 数据库, 中间服务器和客户端数据一致. 但中间服务器最多挂30个客户端. 所以只能采用多级服务器来分担负载.

其实我觉得翻译Hibernate文档的意义不是很大。一来是因为Hibernate更新太快,文档一直在变;二来对于一个程序员来说,英文不应该成为障碍,事实上技术文档英文句子都很简单,并不难懂。

我认为真正需要的是一本写的很好的Hibernate教程,除了把Hibernate本身的配置,调用方法这些最基本的东西进行介绍之外,应该把重点放在如何运用Hibernate进行对象持久层的设计上来,从这样的角度来写书,读者能够得到比单单学习Hibernate更多的东西。

就像EJB,市面上的大部分书都是讲怎么写EJB的,但是你会用EJB不意味着你知道应该怎么用EJB,怎么才能用好EJB,你还需要学习大量的EJB设计模式才能在项目中把EJB运用好。

Hibernate的使用方法可以比较简单的介绍,或者直接翻译文档,但是要把怎么运用Hibernate这些内容编写好,是很花功夫的,要求作者本身对Hibernate非常精通,而且有非常丰富的设计经验才行,另外就是需要花大量的时间去写作,去准备例程,我曾经有过想写Hibernate方面书的想法,但是没有勇气去写。

算了, Robbin, 众口难调,写完了要吐血的.
是啊,它本身带的那个例子,简直就不能称为例子
eclipse下可以使用XML Buddy Plugin