`
newslxw
  • 浏览: 212822 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

hibernate在新项目上应用的弊端

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

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

如果不是项目要求,我更倾向选择ibatis。
分享到:
评论
47 楼 EdwardWorld 2011-04-26  
fhx007 写道
同感,我现在只要是做新项目都用ibatis,早就抛弃hibernate了

终于有人敢替MyBatis说话了。
MyBatis这个小三,在ItEye被压制了n久,大家都不敢把它提到台面上啊。
46 楼 fhx007 2011-04-26  
同感,我现在只要是做新项目都用ibatis,早就抛弃hibernate了
45 楼 chinpom 2011-04-26  
<div class="quote_title">nishijia 写道</div>
<div class="quote_div">弱弱地问一下,lazy加载的问题 该如何解决? 我曾经听过一个多年的架构师用hibernate,遇到lazy加载的时候session关闭的问题,最后只好关掉lazy</div>
<p>使用OpenSessionInView这种反模式,等视图渲染完毕后可以自动关闭Session。在Web应用中,一般都是使用过滤器来实现的,这时候就要注意过滤器的配置顺序了,OpenSessionInView的过滤器一定要放在其它框架或是模板引擎的过滤器前面,以免页面还没开始渲染,Session就被过滤器自动关闭了。</p>
44 楼 caomeiliang 2011-04-26  
不过我也同意遗留项目最好不要用hibernate
并且最好不要做级联,麻烦的很
延迟加载如果没有特别的要求,也最好是关掉

43 楼 caomeiliang 2011-04-26  
2个都用过
说实在的,使用原生sql的hibernate的配置和ibatis没什么两样
为什么还有人说ibatis好于hibernate

另外,我不敢说hql可以完全替代原生sql,但是我至今为止用过的项目都可以用hql写查询语句,不过有些的确是很麻烦就是了。
42 楼 nishijia 2011-04-26  
弱弱地问一下,lazy加载的问题 该如何解决? 我曾经听过一个多年的架构师用hibernate,遇到lazy加载的时候session关闭的问题,最后只好关掉lazy
41 楼 sdtm1016 2011-04-26  
200cc 写道
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写这个比较顺手.我只会oracle - -.
SELECT * FROM (
SELECT A.*, ROW_NUMBER() OVER(PARTITION BY CID ORDER BY VAULE DESC) RANK
  FROM (SELECT X.*, S.NAME SNAME, C.NAME CNAME
          FROM A_STUDENT S, A_COURSE C, A_SCORE X
         WHERE X.SID = S.ID
           AND X.CID = C.ID) A )WHERE rank<=10

+1,考虑了重复的情况
40 楼 lkj107 2011-04-26  
项目用hibernate,有个人能够驾驭他就够了
39 楼 iday 2011-04-26  
其实楼猪可以用ibatis,但是不要再抱怨ibatis。不过那也是你的自由。
38 楼 iday 2011-04-26  
我检到一把屠龙刀。发现它杀猪根本不行,动不动就把猪劈个稀巴烂,杀人也不行,太重了,我还没举几下就没力气了。
37 楼 lxs647 2011-04-26  
hql 由于不支持select后面的子查询,所以用来做动态列的时候还是有麻烦的、、、
36 楼 ppgunjack 2011-04-26  
orm和rdbms本身思维方式和构建方法就很难完全一致,自然orm就不可能解决基于rdbms系统的全部问题
就像很多人想用plsql解决应用层的问题,但是sql和高级语言处理哲学就不一样所以也不可能解决所有app层的数据处理问题
35 楼 envy2002 2011-04-26  
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什么的,内心的鸡血就沸腾了,对这些框架崇拜的五体投地,其实工作了一段时间,你自己感触多了,就可以得出本质的东西,也会对这些东西赞赏和不屑起来,以后能力强了,说不定你自己都可以做个框架,呵呵。希望牛人批评,指正!
34 楼 huhuanqadn 2011-04-26  
说这么多可能大家没理解。
我的意思就是一个复杂的sql查询相当于一个过程,那么我们要用hibernate,我们就要用面向对象的方式来处理这个过程,显然处理的方式就是对整个过程多次分解以形成多个对象,这就是hibernate的面向对象查询。
33 楼 huhuanqadn 2011-04-26  
复杂的sql,不能用hibernate,这样说也对,但是我认为可能我们写sql写习惯了,潜意识里觉得就应该这么做。但是hibernate是对象查询,而不是我们的sql查询。对象的出现是为了解决一些复杂的问题,那么我可以说复杂的查询,如果使用hibernat,那么就应该使用对象的观念,即多个对象组成一个复杂的查询,也即对复杂查询进行分解,分解成多个对象查询。这或许就是面向过程与面向对象处理的思维方式。
32 楼 redish 2011-04-26  
感觉Hibernate还是很不错,但是从来都不敢用。
31 楼 280511772 2011-04-26  
不要拿人家的短处来说人家不行好么。。多看看长处,适合就用,不适合拉到。
30 楼 hszdz 2011-04-26  
hibernate有它适合的应用场合,别幻想着能在所有的项目中使用
根据项目的具体情况来选择使用什么技术
29 楼 ily 2011-04-26  
各有优缺点吧,我觉得Spring jdbc还是很适合楼主的。
28 楼 jerry256 2011-04-26  
hibernate很优秀 呵呵

只是越发展越灵活 


相关推荐

    struts+hibernate 项目

    Struts和Hibernate是Java Web开发中的两个重要框架,它们在构建高效、可维护的Web应用程序时发挥着关键作用。这个“Struts+Hibernate项目”旨在为开发者提供一个学习和实践的平台,帮助他们快速理解这两种框架的集成...

    hibernate一对多项目

    本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...

    Hibernate Search配置及简单应用

    Hibernate Search是Hibernate框架的一个扩展,它允许我们在应用程序中实现全文检索功能,使得数据库中的数据可以被快速、高效地搜索。这个功能尤其在处理大量文本数据时非常有用,比如在电商网站的商品搜索或者新闻...

    hibernate_third项目源码

    通过深入理解和实践这些源码,开发者可以更好地掌握Hibernate在实际开发中的应用。 Hibernate是一款强大的Java持久化框架,它简化了数据库操作,将对象与关系数据库之间的映射(ORM)工作自动化。在这个项目中,...

    hibernate_second项目源码

    在这个项目中,开发者将深入理解如何在Java应用程序中使用Hibernate来处理复杂的数据关联和持久化操作。 **一、Hibernate简介** Hibernate是一个强大的开源对象关系映射(ORM)框架,它简化了Java应用对数据库的...

    hibernate3应用实例

    hibernate3应用实例hibernate3应用实例hibernate3应用实例hibernate3应用实例

    hibernate在java中的应用

    java开发过程中hibernate的应用

    Hibernate Web应用的开发步骤

    Hibernate Web应用的开发一般经过以下几个步骤: (1)创建数据库。 (2)将Hibernate所需的JAR包复制到WEB-INF/lib下。 (3)创建Hibernate的配置文件。 (4)利用Hibernate的第三方工具或Eclipse的有关插件从...

    hibernate+maven demo项目工程

    【hibernate+maven demo项目工程】是一个基于Hibernate ORM框架和Maven构建工具的示例项目,旨在帮助开发者理解和实践如何在实际开发中整合这两项技术。该项目的主要目的是展示如何利用Maven管理依赖,以及如何配置...

    spring hibernate ext项目

    在"Spring Hibernate Ext"项目中,Spring和Hibernate被紧密集成,实现了一种数据访问层的解决方案。Spring通过其DataSource和Transaction Manager组件来管理数据库连接和事务,同时通过HibernateTemplate或...

    struts+hibernate web小项目

    2. **Hibernate配置**:学习如何在hibernate.cfg.xml中配置数据库连接,以及在实体类上使用注解实现一对一关系。 3. **Action逻辑**:查看Action类中的方法,理解如何根据请求调用业务逻辑并返回结果。 4. **DAO设计...

    Hibernate应用及其详解

    Hibernate应用及其详解

    hibernate连接Access应用项目例子

    在本项目中,“hibernate连接Access应用项目例子”展示了如何使用Hibernate ORM框架与Microsoft Access数据库进行集成,实现数据的增、删、改、查(CRUD)操作。Hibernate是Java开发中的一个流行ORM(对象关系映射)...

    Hibernate+Struts的J2EE应用开发2

    ### Hibernate与Struts在J2EE中的应用 #### 一、引言 随着企业级应用需求的日益增长,Java作为一种广泛使用的编程语言,在构建大型、复杂的企业应用方面展现了其强大的能力。Java 2 Platform, Enterprise Edition...

    利用Eclipse开发Hibernate应用程序

    插件安装后,开发者可以创建一个新的Java项目,并在其中加入Hibernate所需的lib文件和数据库的JDBC驱动文件。 接下来,需要配置Hibernate的配置文件,通常名为“hibernate.cfg.xml”。在这个文件中,需要指定使用的...

    hibernate开发及整合应用大全

    《Hibernate开发及整合应用大全》是一本专注于Java领域持久化框架Hibernate深度学习和实践的电子书,它旨在帮助开发者在实际项目中高效地利用Hibernate进行数据管理。在讲解Hibernate核心概念的同时,本书还强调了其...

    java视频教程_hibernate3.3.2_项目源码

    9. 实战项目:通过实际项目源码,学习如何在真实场景中应用Hibernate,解决具体问题。 10. 调试与优化:学习如何调试Hibernate应用,以及性能调优的技巧。 通过这个教程,学习者不仅可以获得理论知识,还能通过实际...

    struts2 spring hibernate框架技术与项目实战 光盘源码上

    在本资源中,"struts2 spring hibernate框架技术与项目实战 光盘源码 上"提供了这三大框架的实践项目代码,帮助开发者深入理解并掌握它们的集成与应用。 Struts2作为MVC(模型-视图-控制器)框架,主要负责处理HTTP...

    简单的HIBERNATE应用

    在这个“简单的Hibernate应用”中,我们将探讨Hibernate的基本概念、核心组件以及如何在实际项目中应用。 1. Hibernate概览:Hibernate是一个开源的ORM框架,它提供了一种在Java应用程序中管理关系数据库的机制。...

Global site tag (gtag.js) - Google Analytics