国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Spring是如何管理Hibernate Session的
在使用Spring進(jìn)行系統(tǒng)開(kāi)發(fā)的時(shí)候,數(shù)據(jù)庫(kù)連接一般都是配置在Spring的配置文件中,并且由Spring來(lái)管理的。在利用Spring + Hibernate進(jìn)行開(kāi)發(fā)時(shí)也是如此。下面是一個(gè)簡(jiǎn)單的Spring + Hibernate Dao的例子:

程序代碼public class DaoReal extends HibernateDaoSupport implements Dao {
  public List <User> getAll() {
    return super.getHibernateTemplate().find("from User");
  }
}
  在上面的這個(gè)例子中,我們并沒(méi)有關(guān)閉Session,但程序并沒(méi)有任何問(wèn)題,那是因?yàn)镾pring已經(jīng)幫我們關(guān)閉了。那么再看一個(gè)例子:

程序代碼public class DaoReal extends HibernateDaoSupport implements Dao {
  public List <User> getAll() {
    return super.getSession().createQuery("from User").list();
 ?。?
}
  這個(gè)例子會(huì)不會(huì)有問(wèn)題呢?的確,上面的例子中隱藏了一個(gè)問(wèn)題,數(shù)據(jù)庫(kù)連接并沒(méi)有被關(guān)閉,在我們的印象中這件事似乎應(yīng)該是Spring的。程序執(zhí)行后,好像也沒(méi)有什么問(wèn)題,但是連續(xù)執(zhí)行該語(yǔ)句n次(n <=最大連接數(shù),如果沒(méi)有指定最大連接數(shù),那么默認(rèn)為10次)后,系統(tǒng)處于等待狀態(tài),不會(huì)繼續(xù)執(zhí)行了,控制臺(tái)上并沒(méi)有輸出任何信息。打開(kāi)log文件,發(fā)現(xiàn)系統(tǒng)拋出java.lang.IllegalStateException: Pool not open的異常,無(wú)法打開(kāi)連接。這說(shuō)明系統(tǒng)連接池中所有的連接都在使用中。那么我們手動(dòng)關(guān)閉Session后,應(yīng)該就沒(méi)有問(wèn)題了吧!是這樣嗎?修改我們的例子,如下:

程序代碼public class DaoReal extends HibernateDaoSupport implements Dao {
  public List <User> getAll() {
    Session s = super.getSession();
    try {
      return s.createQuery("from User").list();
    } finally {
      s.close();
    }
 ?。?
}
  執(zhí)行n遍后依然停止響應(yīng)。問(wèn)題出在哪里呢?其實(shí)Spring的Session總是與某個(gè)線程綁定的,而這個(gè)線程往往就是承載Servlet或Jsp的那個(gè)線程,也就是說(shuō),它的生命周期scope是request的。在上面的例子中,我們利用getSession強(qiáng)制獲得了Hibernate的Session,這個(gè)Session可能是當(dāng)前事務(wù)中之前使用過(guò)的,或者可能是一個(gè)新的,并不在當(dāng)前事務(wù)中,Spring只對(duì)當(dāng)前事務(wù)中的Session進(jìn)行關(guān)閉。

  要解決這個(gè)問(wèn)題,方法有很多??梢允褂梦覀冎爸v到過(guò)的getHibernateTemplate().find()。也可以設(shè)定HibernateTemplate的AllowCreate為T(mén)rue,并在finally中關(guān)閉Session。也可以將true作為參數(shù)傳遞到super.getSession(..)方法中取得Session。這里的true表示允許創(chuàng)建。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
hibernate spring的一個(gè)簡(jiǎn)單分頁(yè)實(shí)現(xiàn)
回調(diào) Spring Hibernate DAO 持久層開(kāi)發(fā),
使用Java Generics簡(jiǎn)化數(shù)據(jù)庫(kù)存取類(lèi)DAO開(kāi)發(fā)
備忘使用hibernate分頁(yè)時(shí)連接池耗盡-Hibernate-Java
OpenSessionInViewFilter源碼分析
Generic Data Access Objects
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服