论坛首页 Java企业应用论坛

谈谈Hibernate令人不爽的地方

浏览 95835 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-09-16  
我在做项目的时候一般是native SQL 和 HQL混合使用,如果比较复杂的SQL,用native sql比较容易调优,简单一些的查询就用HQL
0 请登录后投票
   发表时间:2006-09-16  
lszone 写道
我在做项目的时候一般是native SQL 和 HQL混合使用,如果比较复杂的SQL,用native sql比较容易调优,简单一些的查询就用HQL
我也是这么干的
0 请登录后投票
   发表时间:2006-09-16  
tomcat 写道
lszone 写道
我在做项目的时候一般是native SQL 和 HQL混合使用,如果比较复杂的SQL,用native sql比较容易调优,简单一些的查询就用HQL
我也是这么干的


我觉得native sql只是个应急的方案,不是最好的方案。
0 请登录后投票
   发表时间:2006-09-17  
robbin 写道
对于Hibernate,有两点值得反思:

1、HQL创造出来一种语言,目的是以对象方式类SQL去查询数据库,但是为什么不像rails那样,干脆直接定义COC让数据库schema 和对象的schema吻合在一起呢?这样,SQL不就是直接变成了对象查询语言了吗?缺点就是放弃更多更复杂的对象映射模型。但是我的经验表明,项目中要尽量避免复杂的对象映射,这样性能很糟糕,也很容易出错,实际上我仅仅只用n:1就可以表达很多种映射模型了。化繁为简,大巧若拙实为最高境界。

2、现在极其厌恶Hibernate生成的SQL,又臭又长,极难阅读。


HQL 是为了在不同数据库之间做兼容的产物,它确实做了它该做的事。这一点还是很好的,只是学习 HQL 和用好它需要不少的功夫。

Hibernate 生成的SQL性能也还是可以的,只是配置对SQL语句的产生有微妙的作用。这又拉高了学习曲线。

Hibernate 一直最让我不爽的地方,是对 web redeploy 这个问题的态度。

一开始有人说 Hibernate 这个问题是因为其它第三方的包引起的,于是有人说 Hibernate 是个好产品,但是也应该谨慎使用第三方的包,要不然 Hibernate 怎么能走向成熟和专业,可是 Gavin 居然要求版主封了此人的发贴权,呵,怎么都不像是个专业人士。

在越来越多的人反映这个问题时, Hibernate Team 的人把这个问题推向了 cglib, dom4j,一开始说 cglib 的 dynamic proxy 引用了 classloader, 无法释放资源,cglib 的人说他们已经修复了这个问题,后来 Hibernate team 又说是 dom4j 有问题,dom4j 也说自己修复了这个问题。后来又说是 jakarta-common 包中有问题....无论你怎么试,最后你发现 Hibernate 就是存在 redeploy 时 OutOfMemory 的问题。

我自己以前开发过很多 web 应用,也用过 jakarta-common, dom4j 的包,虽然是有一些问题,但是这么频繁引起 redeploy 问题的我还真没遇到过。我试了 spring + hibernate + tapestry. 最后我把 hibernate.jar 去掉,一切就正常了。 spring 中也使用 cglib 啊,也使用 jakarta-common 啊为什么, spring 就不会有问题, hibernate 就有问题?

当你的产品有问题的时候,你就该站出来,承认自己是有问题,然后去解决它。这才是男人。我鄙视 hibernate 的人!!!
0 请登录后投票
   发表时间:2006-09-17  
我觉得不爽的是如果HQL要想使用左右连接,必须先配一对多,多对多才能使用。如果不配,那就不能用。我的系统里都没配,所以碰到左右连接只能用native sql,但框架里又是设计成OO的,用native sql非常别扭。
0 请登录后投票
   发表时间:2006-09-18  
一个软件,一个技术,最重要的是可持续性吧,这几年,不仅仅hibernate,其它的开源软件为可持续性做了多少努力?不知道,我觉得不会超过10%,可能更低。
做为一名java程序员,从职业生涯的角度来说,应该了解一些更为持久的,不是昙花一现的技术,从技术的角度来说,应该了解一些低层基础一点的东西。

ps:
来自国内某技术论坛的观点,对于一个企业级的应用系统系统来说,解决oracle8i,9i到oracle10g的需求很大,从sqlserver迁移到orcle的需求并不多。
除非:1,它不是企业级系统,2,dba那时候头脑发晕。
0 请登录后投票
   发表时间:2006-09-18  
robbin 写道
ddandyy 写道
那robbin说说应该用哪个呢


Java的话,目前来说最好的ORM就是Hibernate了,没有太多别的选择。用Java开发项目,我选择的框架无非也就是Hibernate/Spring/Webwork


看来hibernate的优点还是胜过缺点的啊。
0 请登录后投票
   发表时间:2006-09-18  
Hibernate现在使用的越来越多,所以批评的也越来越多,没有这么多人的使用和批评,他也不可能有更好的发展,相信他的开发者也正在解决这些问题,大家也要有耐心阿,呵呵
0 请登录后投票
   发表时间:2006-09-18  
downpour 写道
Hibernate在查询时,面对很多映射有时候显得很苍白。

例如有个业务场景,Department和Employee是一对多关系。现在我对Department进行分页查询,要求在显示的页面上同时显示每个Department中Employee的数量。这是一个很简单的业务场景,但是想象一下如何用hibernate进行映射?

首先否定一种做法:hql:FROM Department department。然后针对每个department,去做department.getEmployees().size()。这样不仅会发送n+1条SQL,而且性能太低。



呵呵,这种需求,建个视图不就可以了?
方便快捷.
不过,又有人说这样不够oo了.
0 请登录后投票
   发表时间:2006-09-18  
asd 写道
一个软件,一个技术,最重要的是可持续性吧,这几年,不仅仅hibernate,其它的开源软件为可持续性做了多少努力?不知道,我觉得不会超过10%,可能更低。
做为一名java程序员,从职业生涯的角度来说,应该了解一些更为持久的,不是昙花一现的技术,从技术的角度来说,应该了解一些低层基础一点的东西。

ps:
来自国内某技术论坛的观点,对于一个企业级的应用系统系统来说,解决oracle8i,9i到oracle10g的需求很大,从sqlserver迁移到orcle的需求并不多。
除非:1,它不是企业级系统,2,dba那时候头脑发晕。



呵呵,深有同感!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics