爲什麼要在web.xml裏面配置延時加載

filter是在web.xml中配的,跟spring沒關係,你說的延遲加載時hibernate的吧
<filter>
<filter-name>openSession</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
舉個例子,web項目訪問一般是來一個請求,經過action層,然後service層,最後去dao層查數據庫,假設你在數據庫中存放的是能與你實體類中Person類(隨便假設一個)映射的一些字段,你通過id藉助hibernate在dao層查出來的某個Person對象(比如這種代碼:session.load(Person.class, id),參數先後順序忘記了,你可以自己看一下api)如果是load方法得出的話是一個代理對象,你如果不調用Person類中的各種get他裏面屬性的方法是不會真證調用sql語句去查的,而一般我們習慣在action層把查到的Person放到request中(request.setAttribute("person", person))這樣,然後在前臺通過el表達式之類的東西取出來,但是早在dao層中這次數據庫的繪話session已經關閉了,所以你在jsp中通過el表達式取值的話肯定是會報錯的,當然如果你在查詢的時候是通過get方式查的話,當時立即就會發出sql語句把你的Person類中的各個屬性全都填充完畢,這樣就不會出現類似的情況了,第一種情況的解決辦法就是配一個你說的opensessionInviewFilter,這樣可以保證在你在頁面中取Person的屬性的時候session一直是開的,這樣也不會報錯,至於你說的什麼例外,我想應該是你聽哪個蹩腳的老師講的吧,你所謂的例外應該就是異常的意思,就是我說由於session關閉無法發送sql語句取到Person各個屬性報的異常。這麼說你應該可以理解了吧,否則我也無能爲力了。
蠻牛逼,意思是取到數據之後commit後session關閉導致我們取不到數據,設置之後延遲加載
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章