`
newslxw
  • 浏览: 212847 次
  • 性别: 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。
分享到:
评论
87 楼 serbry0033 2011-05-14  
话说 好像没有什么框架是十全十美的!
86 楼 nianien 2011-05-13  
凡是盲目崇拜Hibernate的都是傻X,Hibernate本身也是傻X,又要求数据库结构设计怎样怎样,又要求类设计怎样怎样,什么都按你的设计来,你还不如直接生成应用程序算了!
85 楼 Coffee_Arthur 2011-04-29  
newslxw 写道

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

我也遇到过
session开关不知道在哪儿比较妥当
84 楼 spell 2011-04-29  
hibernate 我从来没有用过,我只用ibatis
83 楼 newslxw 2011-04-29  
java_bigniu 写道
newslxw 写道
java_bigniu 写道
用了hibernate还老想着这表那表的,难怪了
真正的hibernate高手脑子中式没有表这个东西的
都是对象,考虑的是对象和对象之间的关系


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

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

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

是啊,xml多了很难管理,但是用annotation也出现同样的问题,甚至我还不知道那里用到了什么关系,对全局review和统计代码带来很多不便
82 楼 java_bigniu 2011-04-29  
newslxw 写道
java_bigniu 写道
用了hibernate还老想着这表那表的,难怪了
真正的hibernate高手脑子中式没有表这个东西的
都是对象,考虑的是对象和对象之间的关系


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

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

另:
xml在我们项目组是坚决禁止使用的
当有N个实体类的时候,配置文件太多了
我们都用annotation
81 楼 newslxw 2011-04-29  
关于hibernate的效率问题,我对hibernate生成的SQL太长很不爽,而且一个插入语句经常要生生成两个SQL,一个是select一个是insert语句,也不爽。
另外用我只是要查询一个表的数据,往往会查询了多个其他相关的表,当然了如果设置成lazy=true就可解决,但是这时候我们设计代码就得多考虑一下这个表示不是要用lazy呢?这必然导致成本提高。

当然了,以上也是我个人hibernate水平不高导致,欢迎拍砖
80 楼 newslxw 2011-04-29  
关于hql不能实现整个系统的要求,我们项目就有如下要求。
系统需要生成各种报表,包括销售、价格、库存、财务等待,这些报表都很复杂,我们的大部分SQL都超出了4000字符。
我们采用的方式是SQL同一管理,现在然后在代码中同一引用,这样方便管理,数据库有变化,则修改SQL和hibernate的配置文件即可。

关于同时管理hql和sql导致维护成本提高问题:
我还参加了另外一个老项目的修改,这个项目也是hibernate实现,但是也是有复杂SQL直接写在代码中,这时候数据库有变化了,我就得到代码中找相应的SQL修改,同时还有修改hibernate配置文件,当然这个和系统本身的SQL没统一管理有直接关系
79 楼 newslxw 2011-04-29  
java_bigniu 写道
用了hibernate还老想着这表那表的,难怪了
真正的hibernate高手脑子中式没有表这个东西的
都是对象,考虑的是对象和对象之间的关系


我不赞同一对象方式设计数据库,目前主流数据库都是关系数据库,并不适合使用对象方式设计,个人影响,对象方式设计数据库的系统效率不高。
所以我使用hibernate时,还是先以关系方式设计数据库,根据需求、功能、模型设计数据库,然后再生成hibernate的pojo和xml
78 楼 java_bigniu 2011-04-29  
用了hibernate还老想着这表那表的,难怪了
真正的hibernate高手脑子中式没有表这个东西的
都是对象,考虑的是对象和对象之间的关系
77 楼 zhanzhan02 2011-04-29  
hibernate的缓存貌似没多大用处
76 楼 fnet 2011-04-28  
http://www.jdon.com/jivejdon/thread/40790

不依赖hibernate,把领域模型与entity分开,让hibernate成为一个后端入库的工具,以领域模型为核心,这才是王道。
75 楼 kjj 2011-04-28  
buydzyj 写道
kjj 写道
你前面说
引用

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

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



后面又说
引用

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


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

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

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



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

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


做不出来就少吹牛

听不懂人话的是你吧

自己打自己脸爽吧,

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

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

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

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

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

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

74 楼 tq02ksu 2011-04-28  
听说过这么一句话. hibernate在95% 的情况下会运行的很好, 很方便, 但是剩下5%的情况有可能要花费90%的时间去搞他. 所以技术只是表面, 关键看怎么去用.
设计和平衡很重要
73 楼 buydzyj 2011-04-28  
kjj 写道
你前面说
引用

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

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



后面又说
引用

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


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

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

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



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

我们公司虽不济,至少也是世界前20名的软件企业。部分代码是签过保密协议的,能随便往外贴吗?
72 楼 kjj 2011-04-27  
你前面说
引用

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

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



后面又说
引用

用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实现的系统有几个是业务逻辑复杂的?
70 楼 kjj 2011-04-27  
buydzyj 写道
caomeiliang 写道
buydzyj 写道
hibernate不适合业务逻辑复杂的系统

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


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


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

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

谁告诉你存储过程是要用hql写的
你不要拿一堆你们封装的很难看的代码来说事,
你用jdbc实现不了这个,就别拿这个对hibernate说事
hibernate的核心概念是啥.............
搞清楚再来发表看法......
一个框架有他解决问题的的目标
没人告诉你hibernate可以替代数据库写存储过程吧!!!
69 楼 newslxw 2011-04-27  
neptune 写道
hibernate要用在新的项目上,表结构要自己设计好(可控)。如果是遗留系统还是ibatis吧。

遗留系统往往已经用了hibernate
68 楼 newslxw 2011-04-27  
danan2008 写道
确实,hibernate对于新手来说,很容易犯错误。没有什么好与不好的技术,都是相对于而言的。

但是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