直接在JSP里用JDBC,可以让页面里的多个操作共享一个Connection;而用Hibernate则每个页面操作都需要一个Connection。能不能从设计的角度谈下这个问题?即为什么Hibernate要这样设计?

解决方案 »

  1.   

    使用一个connection,多线程并发时容易产生脏数据吧
      

  2.   

    我觉的每个页面操作都需要一个Connection,是从数据库角度来做的
    每个页面一个Connection,不用的时候直接关闭这个Connection,而不影响其他的Connection,释放了资源。
    如果页面里的多个操作共享一个Connection,这会让Connection很长时间不能够得到关闭,大大的浪费的资源
      

  3.   

    当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
      

  4.   

    连接池的问题吧   hibernate这样做可以自己管理自己的connection  对开发者透明   而jsp共享Connection 性能上不太好  而且hibernate 可以更好的进行控制事务 
      

  5.   

    每次操作的时候,
    一个Connection同时只能有一个Transaction,
    So,其实,你不管Transaction,不管脏数据的时候,一个Connection可以被共享。
    So,Hibernate这样做。
      

  6.   

    Hibernate真的每个页面操作都需要一个Connection?
    深表怀疑,不会是诈你的吧?
      

  7.   

    页面怎么和connection混到一起讨论了?hibernate是一个线程用一个connection这样设计好处很显然:不会出现多线程并发,比如这边正操作呢,那边connection关闭了。
    还可以做到connection在当前线程中重用,比如对数据进行各种增删改查操作,都是用一个connection
      

  8.   

    一个页面一个connection更有利于资源的合理运用,需要的时候就打开,不用的时候就关闭
    ,纯属个人观点~
      

  9.   

    Hibernate是有连接池的,所以Connection应该本身就是重复利用的。所以不会因为新的Connection而消耗多余资源。而及时关闭,可以有利于Connection的共用。因为连接池内的连接被占用光了,肯定要去建新链接的。JDBC里面每开一个Connection都需要消耗不少资源,所以要共用。
      

  10.   

    Hibernate,有缓存?关闭连接才能清除?
    清除以后才能显示最新数据?
    e...
      

  11.   

    这一个页面中的缓存中的数据共享起来了。
     貌似Spring的opensessioninview
      

  12.   

    可能是hibernate有延迟加载,提高性能的问题吧
      

  13.   

    这个跟HIBERNATE没啥关系把在页面上创建Connection 违反mvc分层原则,页面端也做了持久层的工作了。但尽量少创建Connection是绝对有必要的,比较链接资源是很宝贵的。可以做数据库池,和后端程序来控制Connection的个数
      

  14.   


    這證明 hibernaer 在用 連接池 。
      

  15.   

    其实这种说法也不是很正常,hibernate的一个session是和一个connection联系在一起的,但不代表每一个页面都需要一个connection也就是一个session。至于为什么不像jsp一样共用一个connection,我曾经开发的程序就是这样的,但会出现一个瓶颈,那就是多人同时访问的时候,conncetion根本不够用,也就是没得急处理完一个请求,而另一或多个请求也来了的时候(并发),如果同步处理不当,很容易造成请求处理不全,或是脏数据。这是我以前的一点经验,望多多指教。
      

  16.   

    但是每次都创建一个Connection的话就更占用资源了撒
      

  17.   

    多个jsp页面同时访问一个Connection,长时间得不到关闭,资源得不到释放。
    如果多个多个用户连接不释放,数据库的连接数有一定的数量限制,数据库就会Down掉.正常Conncetion是不允许声明成static的就是怕数据库down掉.
      

  18.   

    恩~首先感谢大家对这个问题的关注及解答。在参考了2 9 12 23 30 59楼的解答并查阅了相关资料后个人觉得答案可能是这个:
    JSP页面是单实例多线程访问,即只产生一个实例,但对于每个用户访问都会产生一个线程。如果JSP中所有操作共用一个Connection,当多个用户多线程访问该JSP不同方法时如果不进行很好的同步则可能会出现问题(Connection本身也不是线程安全的)。而Hibernate每个操作方法一个Connection,则无须考虑方法之间的同步问题,虽然创建Connection是一个蛮耗费资源的工作,但Hibernate里使用了连接池可以重用Connection从而可以较好的解决资源消耗问题。
    不知大家还有没更好的解答?
      

  19.   

    延迟加载 感觉只有这个说法 因为单例模式 增加了速度 而没有考虑服务器的承受度 
    如果 每个用户每个页面操作都需要一个Connection 大大减小了 服务器的承受度 给服务器争取了时间
      

  20.   


    我不认同你这说法,一个jsp页面,相当于是一个servlet,大家都知道servlet是线程不安全的,但是你在jsp页面中打开的connection,执行的数据库操作,编译成servlet的时候,是在servlet的execute方法里面执行的,这个应该就没有多线程的问题了,至于你说的连接池的问题,这个和直接在jsp中用connection和hibernate应该没太大的关系,两种都可以从连接池里面取connection,另外hibernate通过借助ThreadLocal保证一个线程共用一个connection啊,可能我理解的有误啊,请大家指点!
      

  21.   

    都没用过Hibernate,就用过一点Spring.
    学习一下。顶
      

  22.   

    这个应该跟hibernate连接池有关吧
      

  23.   


    从题目来看,JSP里面用JDBC,应该是没有用到连接池,所以是可以共享一个Connection,但是对事务的控制不好;Hibernate肯定是用到了连接池,可以控制连接数,这样可以很好的控制事务。