在SSH框架組合作開發時,往往都會遇到需要延遲加載的情況.
在使用spring提供的HibernateDaoSupport和HibernateTemplate時在業務bean調用DAO bean時遇到懶加載問題:session已關閉。
大概有三種解決方法:
1.直接不適用懶加載:lazy="false",這是相當XX的做法,如果確實需要懶加載,這顯然是不能解決問題滴。
2.OpenSessionInViewFilter或者OpenSessionInViewInterceptor,正如名字所示,這是解決在view層裏調用dao層的出現的懶加載問題的方法。其目的是給web request提供單一的hibernate session,但是它也只能給web request提供hibernate session。它會過濾所有指定的web request,並提供持續的session連接。
3.HibernateInterceptor 如果有某一個hibernate請求不是經由web request發起的,而是由quartz這樣的定時任務發起的,那麼quartz怎麼樣才能得到hibernate session呢?解決辦法就是使用HibernateInterceptor。也就是說不是通過控制(過濾)web請求來實現的,更靈活,個人覺得比前兩種好。
/WEB-INF/applicationContext.xml配置例子如下