小弟不明白一个道理,数据持久化hibernate是现在很红的组件,
我大概了解了下,
他持久化是把数据都写入数据库的,这就是它的持久化吗?如果是,那么稍微大一点的系统用了hibernate就不会崩溃了吗?因为有些事务可以用Session、Cookie等保存,如果用了hibernate则和数据库交互非常频繁,那系统如何承受得了?还有一点,他使用的Sql语句我觉得根本是在浪费资源,比如说一个稍微复杂点的Select,他要绕好个圈子才能查出来,特别浪费系统资源。特别不容易控制。我怎么觉得hibernate所有优点都是它的缺点?小弟不才,对hibernate没有接触过,我做.Net的,像接触Nhibernate,所以想问问各位。

解决方案 »

  1.   

    你没明白是因为你对面向对象理解的还不够深刻,因为目前的数据库都不是面向对象的访问方式,而是面向需要(也就是写sql)。hibernate起的是让开发人员能以面向对象的方式来操作数据,起的是桥梁作用。
    如果需要写很复杂的sql语句,hibernate本身也支持直接书写sql语句的,不一定非要用对象来描述,这个没有问题。但对于一个系统来说大部分访问数据的业务都是比较简单的,所以正能体现hibernate的用武之地。
    另外“事务可以用Session、Cookie等保存”说明你对事物根本不了解(可能你指的是会话),再去了解一下事物吧。
      

  2.   

    hibernate 主要的思想就是面向对象,面向对象的好处就是易扩展,易维护,成本低,如果数据库从mysql换到oracle,你可以配置一下方言即可。hibernate里的session和jsp内置对象的session是两回事,一个是数据库session,你登陆数据库就会有个session,这个session一般由连接池管理,一个是web服务器的session,当你发起服务器请求的时候,服务器就会产生一个web session,HQL并不能解决所有的问题,有时候也要使用原始sql,所以要在效率和面向对象之间衡量,找出最佳解决方案才是王道
      

  3.   


    回楼上两位,Session我并不是不懂,他是和客户端会话用的,但Session喜欢丢值,Cookie不安全,那只能用数据持久化来解决了,但是数据库持久化缺点就是我说的那些。还有wfqqwer5213  换数据库服务器真那么容易吗?随便几个存储过程他就绝对不会移过去。何况视图、作业等等。。
      

  4.   

    试图函数过程这些是数据库端的东西,如果你的原始SQL里很少用到方言,那么你的class是不用修改的,一个易于维护的项目,如果不是万不得已,是不会用到函数和过程的,还有一个概念你的清楚,持久化的范围很广,包括写文件,JDBC,hibernate,jpa,ejb都是持久化技术,hibernate,jpa等属于ormapping技术,即对象关系映射,还有session的问题,你确实要多查询一下资料。包括连接池原理。
      

  5.   

    hibernate是为了提高开发的效率实际上是会额外增加服务器负担的
      

  6.   

    使用hibernate就省下了sql语句的编写、jdbc的二次封装、底层数据操作层组件的编写等步骤,在项目较大、表结构较多的情况下节省了开发工作量,但是hibernate却不是用来改善数据库操作效率的。
    每个工具的出现都是为了解决一些问题,但同时,他也会有一些缺陷或短处,因此hibernate绝对不是任何情况下都适合的。
    有时候直接使用基本的jdbc进行封装或是用iBatis半自动(hibernate相比之下就是“全自动”了)的方式解决数据库访问需求也是不错的选择。
      

  7.   

    持久化的框架现在比较流行的是Hibernate,其优点如下:
          * 使我们生产效率更高,自己体会
          * 使我们的开发更加面向对象,因为使用Hibernate,我们只要操纵对象,就不用写sql语句了
          * 移植性比较好(关键是方言dialect的设置)
          * 支持透明持久化
         
      

  8.   

    事务可以用 session 和 cookie 保存?这种说法哪来的?
      

  9.   

    LZ很明显把Hibernate 中的Session和会话弄混淆了