首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

谈一下Hibernate令人不爽的地方

2012-11-11 
谈谈Hibernate令人不爽的地方对于Hibernate,有两点值得反思: 1、HQL创造出来一种语言,目的是以对象方式类SQ

谈谈Hibernate令人不爽的地方
对于Hibernate,有两点值得反思:

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

2、现在极其厌恶Hibernate生成的SQL,又臭又长,极难阅读。dynamic-insert="true" dynamic-update="true"
来实现的。 82 楼 ken1984 2006-12-28   我感觉现在用这些的就是做做数据的管理平台,甚至是普通的所谓B/S系统的网站,论坛。就好像是把VB从C/S转到B/S,任何一个智力超过10的人都可以做。你们公司接单,做产品,然后收钱,这类公司最需要的就是快速,简单但又要让用户看起来很高档的东西。 83 楼 Allen 2006-12-28   ken1984 写道我感觉现在用这些的就是做做数据的管理平台,甚至是普通的所谓B/S系统的网站,论坛。就好像是把VB从C/S转到B/S,任何一个智力超过10的人都可以做。你们公司接单,做产品,然后收钱,这类公司最需要的就是快速,简单但又要让用户看起来很高档的东西。
很明显,你的感觉错了……
采用Hibernate和Spring之类开源项目的“关键应用”已经为数不少了,许多非常复杂的应用程序也都运用到了它们。 84 楼 shiwentao1982 2007-06-01   我以前参与的一个项目,hibernate使用不当的话会有很严重的性能问题。所以在使用的时候还是应该谨慎啊。 85 楼 anweixiao 2007-06-01   wubg 写道做报表时,用Hibernate生成一个复杂的SQL语句,真是煞费心思,左连右连痛苦,后面就只能直接用JDBC来实现,用hibernate实现对象add,update,delete是容易,但是,复杂的业务,就没法容易实现了
在使用hibernate的时候不要总是想着100%的hibernate,不要为了用hibernate而是使用hibernate,要有选择的使用JDBC,这才是理智的……………… 86 楼 Lordaeron 2007-06-02   Allen 写道ken1984 写道我感觉现在用这些的就是做做数据的管理平台,甚至是普通的所谓B/S系统的网站,论坛。就好像是把VB从C/S转到B/S,任何一个智力超过10的人都可以做。你们公司接单,做产品,然后收钱,这类公司最需要的就是快速,简单但又要让用户看起来很高档的东西。
很明显,你的感觉错了……
采用Hibernate和Spring之类开源项目的“关键应用”已经为数不少了,许多非常复杂的应用程序也都运用到了它们。
有哪一些你口中的<關鍵應用>呢?
可以舉幾個出來聽聽好嗎.
我只認為, 多狗餘的東西就是hibernate.
沒工作過的人才會想hibernate 能怎樣, 實際上並不能怎樣.
業務需求整天都在變, 一天變三次是件平常的事. 加field, 減field, 改field attribute 更可能
是不定期發生. 改這些東西, jdbc 只要改sql 和db, hibernate 呢?
跨平台的sql, 要寫出來有這麼難嗎? 還是你還在用沒subquery 的mysql?
87 楼 chenkan2000 2007-07-25   我怎么觉得Hibernate用起来挺爽的。要求太低?农民啊。 88 楼 cm4ever 2007-07-31   不能延迟加载,一次性加载全部配置费时,哪个业务项目没有100个以上的表?单元测试时能烦死人。

由于人懒和工作忙,我也就改了hb2,没改hb3,麻烦。

其他的没了。 89 楼 myyate 2007-07-31   downpour 写道Hibernate在查询时,面对很多映射有时候显得很苍白。

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

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

我们肯定希望采用一句HQL解决问题,但是此时问题来了,当你试图做SELECT department, count(employee.id) FROM .....这样的HQL时,在Java端,发现没有一个合适的对象可以映射。

从OO的角度,其实可以在Department这个类中加一个employeeSize来表示这种业务场景。但是好像Hibernate无法去做类似的映射。而iBatis在这个方面却灵活的多。
我们项目中也有这个问题,不过我们是通过那个 createFilter来解决的 90 楼 Joseph 2007-07-31   myyate 写道downpour 写道Hibernate在查询时,面对很多映射有时候显得很苍白。

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

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

我们肯定希望采用一句HQL解决问题,但是此时问题来了,当你试图做SELECT department, count(employee.id) FROM .....这样的HQL时,在Java端,发现没有一个合适的对象可以映射。

从OO的角度,其实可以在Department这个类中加一个employeeSize来表示这种业务场景。但是好像Hibernate无法去做类似的映射。而iBatis在这个方面却灵活的多。
我们项目中也有这个问题,不过我们是通过那个 createFilter来解决的
————————————————————————————————————————
createFilter?可以具体谈谈? 91 楼 rainteen 2007-08-01   Readonly 写道downpour 写道
我们肯定希望采用一句HQL解决问题,但是此时问题来了,当你试图做SELECT department, count(employee.id) FROM .....这样的HQL时,在Java端,发现没有一个合适的对象可以映射。

从OO的角度,其实可以在Department这个类中加一个employeeSize来表示这种业务场景。但是好像Hibernate无法去做类似的映射。而iBatis在这个方面却灵活的多。

给一个构建函数:
public class Department(Department d, Integer employeeSize)

然后写成这样:
SELECT new Department(department, count(employee.id)) FROM .....

不就OK了吗?


该方法总会报空指针异常: NullPointerException
92 楼 javaIE 2007-08-01   复杂的语言可以简单使用话嘛!尽量使用HQL语句,实在不行还是回归SQL,Hibernate也支持SQL嘛
怕关系复杂在项目 你可以少使用关系映射啊!
   总之语言是死的,人却是活的啊
..语言要复杂必然需要抛弃一些东西..我们不能老是盯着它的缺点,能使用它的优点就OK了..
  谁没点缺点捏.!?
  

热点排行