Hibernate完全符合我上面提到的标准之外,也解决掉了JDO的所有缺陷,而且方式之优雅令人赞叹。Hibernate的文档也是非常非常有特色的地方,它不仅仅是Hibernate的功能介绍那么简单,它实际上是一个持久层设计的最佳实践的经验总结,文档里面的例子,文档里面的总结全部都是最佳设计的结晶。我认真的把Hibernate读下来的感觉就是,不单单把Hibernate掌握住了,而且对持久层的设计的经验都长了一大块,以前可从来没有觉得持久层的设计还有那么多的学问,也由此感觉到Gavin绝对是一个大牛人。

当然选择Hibernate最最重用的原因是Hibernate是一个我能够完完全全驾驭的了的软件。Hibernate的源代码非常少,而且写的非常简洁,我总觉得挺奇怪的,这么少的源代码能够实现这么多的功能,是个奇迹。Hibernate的源代码树分的很清楚简单,源代码很易读,我一旦碰到文档中没有讲到的问题,或者文档中提到但是我搞不清楚的地方,我就去源代码中找,所有的问题都豁然开朗,而且让我对Hibernate的运行原理和细节搞的特别清楚,好像Hibernate就像自己写的代码一样,很清楚的知道,怎么写程序可以让Hibernate运行效率最高,最省内存,程序出了错误,很清楚的知道是什么地方的问题,怎么解决。所以用Hibernate让我特别放心,我能够驾驭它,而不像那些过于复杂的软件,本身框架就复杂的很,再加上不开源,出了问题也不知道怎么回事。

我仔细的研读了所有的回帖,Robin的这段总结很煽情,好了,我先去下载Hibernate .haha

to yadan
10亿美金的单子你也相信?谁把10亿美金砸在一个刚刚问世的产品上?微软的.net那么好,有那么强大的技术队伍,我相信也没有人将10亿美金全部压在这个技术上。这是常理。
Hibernate不支持集群?还是支持集群?

如果你认真看看Hibernate文档,就应该知道Hibernate支持集群。但是在集群操作下有一些限制,例如不能使用read-write cache等。

10亿的单子确有其事。我不觉得Hibernate用在大项目中有什么奇怪的,本质上就是JDBC的一个轻量级封装而已,如果你能在大单子中用JDBC,又为什么不能用Hibernate呢?反到是大单子用CMP太危险了。

使用CMP查询出的记录好像无法直接排序?那么怎么有效率地对值对象结果集进行排序?

另,如果是条件选择查询,EJB-QL就无能为力了吧?那还是用jdbc,幸好一般应用中这样的机会不是很多.

还有,我一直对CMR比较感冒,总觉得它是个笨重的东西.所以一般用到关联时都使用字段.关系简单时,没必要用CMR,关系复杂时,我又怕CMR把我搞晕出错.

程序员9期上面也在介绍Hibernate,估计对推动它在国内应用会有很大帮助
呵呵~~ 看到这么多人研究新东西不免心痒。

不过,我还是觉得,实用够用的设计与实现就是好东东。没有必要为了新的技术去花太多时间,除非新的技术能带来更好的开发效率,能让开发人员得到更好的解放,能带来更好的思维方式,否则不值得投入。

其实大家讨论得很多的是如何将对象保存在数据库里,而且也有大量这样的框架。但是我想强调的是对象实体(Entity)的多种存贮方式,如大家熟悉的 RDBMS,LDAP,File,Memory等等~~ 数据库不过是其中一种对象存贮的方式。今天你考虑的是数据库的应用,明天如果客户要求换到 LDAP,你又如何处理呢?

持久层不应只考虑 RDBM

>>不过,我还是觉得,实用够用的设计与实现就是好东东。没有必要为了新的技术去花太多时间,除非新的技术能带来更好的开发效率,能让开发人员得到更好的解放,能带来更好的思维方式,否则不值得投入。

同意!所以大家都不要乱起哄了,真正需要用到Hibernate的人才值得花时间,其它人没有必要一拥而上去浪费宝贵的时间了。

>>其实大家讨论得很多的是如何将对象保存在数据库里,而且也有大量这样的框架。但是我想强调的是对象实体(Entity)的多种存贮方式,如大家熟悉的 RDBMS,LDAP,File,Memory等等~~ 数据库不过是其中一种对象存贮的方式。今天你考虑的是数据库的应用,明天如果客户要求换到 LDAP,你又如何处理呢?

目前数据库API和LDAP的API还完全是两套,就是在Java语言这一层都没有统一,所以更加不可能要求框架统一起来。我还是觉得能专注把一件事情做到最好就可以了,管的越多,可能最后什么都没有做好。

真有意思,iceant你的意思等同于拿JDO来跟Hibernate来比较...其实不算一个层次的东西
上面robbin说了,Hibernate不过是对JDBC进行了轻量级封装,如果懒得写SQL代码,又对CMP不太满意,不妨试试这个
Hibernate不是万能丹,也不是终极的持久化工具,仅仅是个比较好用的工具而已...
jd2bs

发表文章: 14
注册时间: 2002-08


Re: 借地问个问题? 发表时间: 2003年09月02日 15:24:13 回复

使用CMP查询出的记录好像无法直接排序?那么怎么有效率地对值对象结果集进行排序?

另,如果是条件选择查询,EJB-QL就无能为力了吧?那还是用jdbc,幸好一般应用中这样的机会不是很多.

还有,我一直对CMR比较感冒,总觉得它是个笨重的东西.所以一般用到关联时都使用字段.关系简单时,没必要用CMR,关系复杂时,我又怕CMR把我搞晕出错.

////////
呵呵,你在哪里学的“感冒”一词?
过去在老家的时候,我们说“对XXX不感冒”,意思是“对XXX没兴趣,爱死死,爱活活,不干我事”


另外,不要小瞧EJB-QL,抄一个树上的例子:
有一个拍卖系统,有一个实体bean映射了一个拍卖:
SELECT OBJECT(auction) FROM EnglishAuction auction, IN(auction.bids) aBid WHERE aBid.amountField>500.0

这个语句返回有大于500应价的拍卖。
bids是EnglishAuction实体bean的cmr-field,是一个集合类型,集合中的元素对应的对象有一个字段叫amountField.
至于条件,EJB-QL不是可以像preparedStatement一样使用参数吗?

TO: windman
我连 JDO 倒底是什么都没弄清楚 ~_~
你说得很对,Hibernate 只是一个工具,而且只是针对 RDBM ,用于简化某些工作的工具。
就吃饭问题来说,MySQL不能跟hibernate相比

MySQL是决定你吃什么饭
而hibernate则是让你再相同的时间里吃更多的饭,吃得舒服些

感谢你的回复.
我所说的条件选择是指该条件可以为空(为空where就没有该Filed)也可以不为空的情况,不是指where FieldA = ?l and FieldB = ?l这样的多个where 约束.
我不太清楚能不能解决.
另外,能不能谈谈CMP中如何排序?
我想是不能吧,首先,从来没有见过相关的介绍和例子。
其次,如果可以实现你说的这种需求,那么,ejb的find方法可能就不会像现在这样命名都叫:findByXXX,可以猜想规范指定人以这种方法命名的心理,肯定一种find方法是和一种条件逻辑绑定的。
关于排序,我去找一下我在Chinajavaword上的帖子,然后贴给你。
那个论坛今天慢的要死,算了。
EJB的find方法,它的返回类型通常推荐为Collection 。
Collection的成员是代表值对象的实现了Seriallizable接口的简单JavaBean。
如果要排序的话,当然是对这些返回的Collection进行排序。
通常不会在表现层直接调用find方法,所以,可以将排序放在查询之后,显示之前。
对集合排序,可以使用JDK提供的java.util.Collections提供的方法进行。

有很好的技术不一定懂得很好的设计。

学习优秀的开源的框架作品,能让我知道如何更好的去设计自己的软件。