hibernate在新项目下应用的弊端

hibernate在新项目上应用的弊端
首先,我并不是一个hibernate开发的推崇者,也不精通hibernate,只是在某几个项目上用到了hibernate,下面是我的感受:
1、lazy加载,经常带来问题
2、级联保存常带来问题,所以我开发是都不用级联保存
3、主键的native要求主键使用number类型,给设计带来麻烦
4、很多人开发是不设计表结构,而是用hibernate来生产数据库,对维护带来很多影响
5、处理复杂SQL,还是需要用SQL而不能用HQL,导致语言混杂,增加维护成本
6、大数据量时,很容易出现问题
7、不适合新人使用,项目中往往有工作经验较低的人,使用hibernate往往容易出错

我对持久层框架要求很简单:
1、自动POJO到数据,或者数据库到POJO
2、适度缓存

如果不是项目要求,我更倾向选择ibatis。
68 楼 newslxw 2011-04-27  
danan2008 写道
确实,hibernate对于新手来说,很容易犯错误。没有什么好与不好的技术,都是相对于而言的。

但是hibernate的错误没有其他的技术明显,有些到了发布后才发现,而且往往导致系统性能低下,这样一整就导致整个项目的成本提高了
69 楼 newslxw 2011-04-27  
neptune 写道
hibernate要用在新的项目上,表结构要自己设计好(可控)。如果是遗留系统还是ibatis吧。

遗留系统往往已经用了hibernate
70 楼 kjj 2011-04-27  
buydzyj 写道
caomeiliang 写道
buydzyj 写道
hibernate不适合业务逻辑复杂的系统

请问这样的存储过程如何用Hql实现?


我很想知道你用jdbc或者ibatis写这个存储过程咋写?别告诉我用CallStatement


先搞清楚概念:存储过程是在数据库中写,不在jdbc或者ibatis中写;CallStatement也不是写存储过程,只是调用存储过程。还有,是CallableStatement,而不是CallStatement。

具体实现我们自己对jdbc访问存储过程进行了封装,通过反射与泛型,定义好了存储过程入口对象与返回对象,自动完成对对象的封装。

谁告诉你存储过程是要用hql写的
你不要拿一堆你们封装的很难看的代码来说事,
你用jdbc实现不了这个,就别拿这个对hibernate说事
hibernate的核心概念是啥.............
搞清楚再来发表看法......
一个框架有他解决问题的的目标
没人告诉你hibernate可以替代数据库写存储过程吧!!!
71 楼 buydzyj 2011-04-27  
kjj 写道
buydzyj 写道
caomeiliang 写道
buydzyj 写道
hibernate不适合业务逻辑复杂的系统

请问这样的存储过程如何用Hql实现?


我很想知道你用jdbc或者ibatis写这个存储过程咋写?别告诉我用CallStatement


先搞清楚概念:存储过程是在数据库中写,不在jdbc或者ibatis中写;CallStatement也不是写存储过程,只是调用存储过程。还有,是CallableStatement,而不是CallStatement。

具体实现我们自己对jdbc访问存储过程进行了封装,通过反射与泛型,定义好了存储过程入口对象与返回对象,自动完成对对象的封装。

谁告诉你存储过程是要用hql写的
你不要拿一堆你们封装的很难看的代码来说事,
你用jdbc实现不了这个,就别拿这个对hibernate说事
hibernate的核心概念是啥.............
搞清楚再来发表看法......
一个框架有他解决问题的的目标
没人告诉你hibernate可以替代数据库写存储过程吧!!!


感觉你的个人素质太差了。
你没见过我们封装的代码,有什么资格说封装的很难看?
你又怎么知道我们用jdbc实现不了?相反,我们用jdbc实现难度也不大。不过由于业务逻辑较复杂,并且可能中间的流程会由于数据而发生变更,所以,将数据业务逻辑全部摆在存储过程中,这样,中间流程变更后,只需要修改存储过程;否则,既要修改数据库的某些部分,又要修改程序,就不能够实现快速变更。
没人告诉你hibernate可以替代数据库写存储过程吧?我们当然知道,不过这么做没有实际意义,直接在数据库中写存储过程比用hibernate方便多了。用hibernate写存储过程,完全就是脱裤子放屁,多此一举!搞清楚一个概念:可以做不代表适合做。汇编也可以用来做web程序,但是有谁真的会用汇编做web程序呢?
我只是说hibernate不适合业务逻辑复杂的系统。你仔细想想,用hibernate实现的系统有几个是业务逻辑复杂的?
72 楼 kjj 2011-04-27  
你前面说
引用

hibernate不适合业务逻辑复杂的系统

请问这样的存储过程如何用Hql实现?



后面又说
引用

用hibernate写存储过程,完全就是脱裤子放屁,多此一举!搞清楚一个概念:可以做不代表适合做


既然知道是脱裤子放屁,还要质问别人怎么写

喜欢自己扇自己嘴巴,我没话可说了

唯一可吹牛的是你封装的,是骡子是马拉出来溜溜啊,别光用嘴!!

73 楼 buydzyj 2011-04-28  
kjj 写道
你前面说
引用

hibernate不适合业务逻辑复杂的系统

请问这样的存储过程如何用Hql实现?



后面又说
引用

用hibernate写存储过程,完全就是脱裤子放屁,多此一举!搞清楚一个概念:可以做不代表适合做


既然知道是脱裤子放屁,还要质问别人怎么写

喜欢自己扇自己嘴巴,我没话可说了

唯一可吹牛的是你封装的,是骡子是马拉出来溜溜啊,别光用嘴!!



我发现你超级弱智,明显中文学得不怎么样。
存储过程如何用Hql实现=用hibernate写存储过程?这两句话是一个意思吗?存储过程如何用Hql实现:是指不用存储过程,而改用Hql实现同样的功能。用hibernate写存储过程,是指用hibernate写出存储过程。
连中文都读不懂,还做程序员,真无语!

我们公司虽不济,至少也是世界前20名的软件企业。部分代码是签过保密协议的,能随便往外贴吗?
74 楼 tq02ksu 2011-04-28  
听说过这么一句话. hibernate在95% 的情况下会运行的很好, 很方便, 但是剩下5%的情况有可能要花费90%的时间去搞他. 所以技术只是表面, 关键看怎么去用.
设计和平衡很重要
75 楼 kjj 2011-04-28  
buydzyj 写道
kjj 写道
你前面说
引用

hibernate不适合业务逻辑复杂的系统

请问这样的存储过程如何用Hql实现?



后面又说
引用

用hibernate写存储过程,完全就是脱裤子放屁,多此一举!搞清楚一个概念:可以做不代表适合做


既然知道是脱裤子放屁,还要质问别人怎么写

喜欢自己扇自己嘴巴,我没话可说了

唯一可吹牛的是你封装的,是骡子是马拉出来溜溜啊,别光用嘴!!



我发现你超级弱智,明显中文学得不怎么样。
存储过程如何用Hql实现=用hibernate写存储过程?这两句话是一个意思吗?存储过程如何用Hql实现:是指不用存储过程,而改用Hql实现同样的功能。用hibernate写存储过程,是指用hibernate写出存储过程。
连中文都读不懂,还做程序员,真无语!

我们公司虽不济,至少也是世界前20名的软件企业。部分代码是签过保密协议的,能随便往外贴吗?


做不出来就少吹牛

听不懂人话的是你吧

自己打自己脸爽吧,

20强怎么了,jdbc封装个存储过程连20万强的企业都写的出来

就你还晒20强,把丢人当荣誉

你用你的猪脑袋想想也知道我说的不是这个意思,拿不出东西了来证明你的论点就算了,

还玩文字游戏,20强有你,还真高看了20强的企业,

好企业里混混和垃圾也不少,

连微软里也有这种人............

76 楼 fnet 2011-04-28  
http://www.jdon.com/jivejdon/thread/40790

不依赖hibernate,把领域模型与entity分开,让hibernate成为一个后端入库的工具,以领域模型为核心,这才是王道。
77 楼 zhanzhan02 2011-04-29  
hibernate的缓存貌似没多大用处
78 楼 java_bigniu 2011-04-29  
用了hibernate还老想着这表那表的,难怪了
真正的hibernate高手脑子中式没有表这个东西的
都是对象,考虑的是对象和对象之间的关系
79 楼 newslxw 2011-04-29  
java_bigniu 写道
用了hibernate还老想着这表那表的,难怪了
真正的hibernate高手脑子中式没有表这个东西的
都是对象,考虑的是对象和对象之间的关系


我不赞同一对象方式设计数据库,目前主流数据库都是关系数据库,并不适合使用对象方式设计,个人影响,对象方式设计数据库的系统效率不高。
所以我使用hibernate时,还是先以关系方式设计数据库,根据需求、功能、模型设计数据库,然后再生成hibernate的pojo和xml
80 楼 newslxw 2011-04-29  
关于hql不能实现整个系统的要求,我们项目就有如下要求。
系统需要生成各种报表,包括销售、价格、库存、财务等待,这些报表都很复杂,我们的大部分SQL都超出了4000字符。
我们采用的方式是SQL同一管理,现在然后在代码中同一引用,这样方便管理,数据库有变化,则修改SQL和hibernate的配置文件即可。

关于同时管理hql和sql导致维护成本提高问题:
我还参加了另外一个老项目的修改,这个项目也是hibernate实现,但是也是有复杂SQL直接写在代码中,这时候数据库有变化了,我就得到代码中找相应的SQL修改,同时还有修改hibernate配置文件,当然这个和系统本身的SQL没统一管理有直接关系
81 楼 newslxw 2011-04-29  
关于hibernate的效率问题,我对hibernate生成的SQL太长很不爽,而且一个插入语句经常要生生成两个SQL,一个是select一个是insert语句,也不爽。
另外用我只是要查询一个表的数据,往往会查询了多个其他相关的表,当然了如果设置成lazy=true就可解决,但是这时候我们设计代码就得多考虑一下这个表示不是要用lazy呢?这必然导致成本提高。

当然了,以上也是我个人hibernate水平不高导致,欢迎拍砖
82 楼 java_bigniu 2011-04-29  
newslxw 写道
java_bigniu 写道
用了hibernate还老想着这表那表的,难怪了
真正的hibernate高手脑子中式没有表这个东西的
都是对象,考虑的是对象和对象之间的关系


我不赞同一对象方式设计数据库,目前主流数据库都是关系数据库,并不适合使用对象方式设计,个人影响,对象方式设计数据库的系统效率不高。
所以我使用hibernate时,还是先以关系方式设计数据库,根据需求、功能、模型设计数据库,然后再生成hibernate的pojo和xml

我们老大也是先设计表,再用hibernate,我感觉他本末倒置了

另:
xml在我们项目组是坚决禁止使用的
当有N个实体类的时候,配置文件太多了
我们都用annotation
83 楼 newslxw 2011-04-29  
java_bigniu 写道
newslxw 写道
java_bigniu 写道
用了hibernate还老想着这表那表的,难怪了
真正的hibernate高手脑子中式没有表这个东西的
都是对象,考虑的是对象和对象之间的关系


我不赞同一对象方式设计数据库,目前主流数据库都是关系数据库,并不适合使用对象方式设计,个人影响,对象方式设计数据库的系统效率不高。
所以我使用hibernate时,还是先以关系方式设计数据库,根据需求、功能、模型设计数据库,然后再生成hibernate的pojo和xml

我们老大也是先设计表,再用hibernate,我感觉他本末倒置了

另:
xml在我们项目组是坚决禁止使用的
当有N个实体类的时候,配置文件太多了
我们都用annotation

是啊,xml多了很难管理,但是用annotation也出现同样的问题,甚至我还不知道那里用到了什么关系,对全局review和统计代码带来很多不便
84 楼 spell 2011-04-29  
hibernate 我从来没有用过,我只用ibatis
85 楼 Coffee_Arthur 2011-04-29  
newslxw 写道

1、lazy加载,经常带来问题

我也遇到过
session开关不知道在哪儿比较妥当hibernate在新项目下应用的弊端
86 楼 nianien 2011-05-13  
凡是盲目崇拜Hibernate的都是傻X,Hibernate本身也是傻X,又要求数据库结构设计怎样怎样,又要求类设计怎样怎样,什么都按你的设计来,你还不如直接生成应用程序算了!
87 楼 serbry0033 2011-05-14  
话说 好像没有什么框架是十全十美的!