论坛首页 Java企业应用论坛

hibernate在新项目上应用的弊端

浏览 42034 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2011-07-27  
有多复杂的SQL? 苛刻的无聊的企业应用做得不少了,SQL都是自己优化的,从没烦过DBA.
0 请登录后投票
   发表时间:2011-10-26  
SQL能复杂到哪里去?
举例说说
级联保存,延迟加载,批量抓取,要根据业务场景来慢慢调试出最佳性能
数据量大一点二级缓存是必须的
0 请登录后投票
   发表时间:2011-12-19  
xiaotot 写道
貌似没有一个人提到了数据库迁移的问题
如果你的系统跟数据库耦合度这么高,
人家从oracle要更换到DB2,
你的代码修改量会有多大?

还有,hb只是一个持久层的架构,
我看大家讨论的东西,感觉大家把hb都过多的参与到逻辑层,
额...
让我有种把裤衩当帽子感觉,虽然能戴上,
可是他看起来很别扭,甚至很恶心

一个系统框架,仅仅靠ssh,来搭建起来,
其他的地方逻辑架构混乱,
就跟只有一个房架,没打地基一样

还有感觉大家都太过依赖于数据库的计算而放弃了程序的计算
有一些逻辑运算,可以放到程序之中,来做一些解耦
有一些大幅度的运算可以构建视图或者存储过程,
为什么有了HB就想把所有的东西都放在hb里面呢?

还有一点,你是吧hb当核心了还是把hb当工具了呢?

终于看到一个可心的评论
0 请登录后投票
   发表时间:2011-12-21  
任何技术框架 都有利弊 要看你的需求 和切入点 利弊自己权衡
0 请登录后投票
   发表时间:2012-02-17  
envy2002 写道
Tank03 写道
hibernate本身没有弊端.是因为用的不好才出现了弊端


不能这么说,任何东西都有双面性,有好的,有坏的。有时候他能满足你,有什么他不能满足你,要具体情况具体分析。据我所遇到的情况hibernate的弊病还是有一些的。

例如:
1.hibernate只能有一个**.hbm.xml。这就造成了对象需求的冲突,比如你查一个对象A,A对象下面连带立即查出3个对象B(这种配置可以达到),很显然,有人需要的查询只需要检出对象A即可,不需要对象B(但是这个配置已经固定了)这就造成了内存效率的浪费,ibatis应该不存在这个困难。

2.负责的缓存机制。haibernate为了提高效率,可以把很多对象缓存到内存中,这就存在DB实体和内存对象实体的同步问题,你想findbyid(int id)查出一个对象,然后再new 一个vo,vo.setid(查出对象的id),然后update,对不起,搞不进去的。(这里可能描述不准确),反正意思就是hibernate有自己的机制,这个机制能保证逻辑的一致,完整,一起都是为了同步DB,但是这些抽象的机制令人费解。

3.有的人java开发多了,老是用对象的眼光思考问题,hibernate符合这部分人的口味,因为hiberante就是很好的面向对象的。如果你再看看c++,perl开发的web,php开发的web,他们完全可以做到同样的效果。那么我们可以看出是面向数据库的开发,所有的程序是为了数据库服务。这样你可以充分发挥你数据库的能力极限,用数据库的过程,函数,索引等等。所以java面向对象就没有那么重要了。翻翻oracle优化的几个准则, 不要使用not in, 不要在索引上使用函数,连接表的时候选择好基表,这些hibernate可以做到吗,很难,或者是被忽略了。ibatis不存在这个问题,因为它的抽象程度没有Hibernate高,面向对象没有hibernate做的好!

事情的发展都是涨涨停停,此消彼长,不存在绝对的好,不存在绝对的坏,自己要思考一下,不盲从,有见地。刚开始我们学习的时候,老是要强迫自己学会这个,掌握那个,再看看别人招聘的简历,要求SSH什么的,内心的鸡血就沸腾了,对这些框架崇拜的五体投地,其实工作了一段时间,你自己感触多了,就可以得出本质的东西,也会对这些东西赞赏和不屑起来,以后能力强了,说不定你自己都可以做个框架,呵呵。希望牛人批评,指正!



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

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

如果不是项目要求,我更倾向选择ibatis。

楼主就是个小屁孩,入门几天了
0 请登录后投票
   发表时间:2012-02-20  
KimShen 写道
newslxw 写道

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

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

如果不是项目要求,我更倾向选择ibatis。


1,没说要强制lazy
2,级联保存不代表数据库就是级联的.而且请举例问题?
3,我怎么不知道主键强制使用number,那你们是用什么?
4,正向工程和逆向工程是你自己选择的
5,你来句SQL,只要你表设计是合理的我就能用HQL或者QBC帮你写出来.写不出来十有八九是数据表设计有问题
6,大量是多少?我们查询40w条数据也没发现问题么?难道不用分页?
7,这个我认同

综上所述,你的感受大多数是因为你也不熟悉Hibernate.我不反对MyBatis,但是MyBatis还不如DBUtils和SpringJDBC Template


用了下dbUtils,感觉也挺好用的,完全就是jdbc的封装,应该不会有楼主说的那些问题
http://www.iteye.com/topic/1119907
0 请登录后投票
   发表时间:2012-02-20  
技术没有高低之分,关于hibernate的纷争,仁者见仁,智者见智,没有什么好与好,只有顺手不顺手...
0 请登录后投票
   发表时间:2012-02-26  
zhangpurple 写道
newslxw 写道
首先,我并不是一个hibernate开发的推崇者,也不精通hibernate,只是在某几个项目上用到了hibernate,下面是我的感受:
1、lazy加载,经常带来问题
2、级联保存常带来问题,所以我开发是都不用级联保存
3、主键的native要求主键使用number类型,给设计带来麻烦
4、很多人开发是不设计表结构,而是用hibernate来生产数据库,对维护带来很多影响
5、处理复杂SQL,还是需要用SQL而不能用HQL,导致语言混杂,增加维护成本
6、大数据量时,很容易出现问题
7、不适合新人使用,项目中往往有工作经验较低的人,使用hibernate往往容易出错

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

如果不是项目要求,我更倾向选择ibatis。

楼主就是个小屁孩,入门几天了

我倒是觉得楼主说的挺有道理的,至少面对多表关联的时候,hibernate根本没有什么优势,还是依靠sql来做,如果使用sql做,那用hibernate有什么特殊。等真写左外连接,右外连接的时候,更复杂了。别上来就说人家入门不入门的,人家不用hibernate就不入门啊?你们DBA有几个会HQL的?别出来装
0 请登录后投票
   发表时间:2012-04-01  
mlw2000 写道
KimShen 写道

5,你来句SQL,只要你表设计是合理的我就能用HQL或者QBC帮你写出来.写不出来十有八九是数据表设计有问题

综上所述,你的感受大多数是因为你也不熟悉Hibernate.我不反对MyBatis,但是MyBatis还不如DBUtils和SpringJDBC Template

两个都不完全认同,我来举个例子:
t_student(id,name); -- 学生表
t_course(id,name); -- 课程表
t_score(id,student_id,course_id,score_value); -- 成绩表


给出SQL或HQL或QBC求出每门课前十名的学生记录?

从你提问的方式上就可以看到,这是明显的SQL思维,面向关系数据库的思维,而非面向对象,面向领域模型的思维。我非常怀疑你在使用hibernate的时候总是实体有几个属性、类就又几个属性。如果真是这样,那可真是糟蹋了Hibernate。
莫非你认为这个hibernate做不出来?或者做出来很复杂?有时间我给你个完整解决方案。
0 请登录后投票
论坛首页 Java企业应用版

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