錯誤訊息:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
原因:hibernate session可由spring在控制,hibernate允許對關聯對象、屬性進行延遲加載,但是必須保證延遲加載的操作限於同一個Hibernate Session 範圍之內進行。若Session關閉後,會導致延遲加載資料的訪問異常。
解決方式:
使用OpenEntityManagerInViewFilter,注意這裡所使用的Filter跟hibernate不一樣
1. 在web.xml加上
OpenSessionInViewFilter org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter OpenSessionInViewFilter /*
2. 若再出現下面錯誤
錯誤訊息:
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
很明顯告訴我們,沒有載入ContextLoaderListener,在web.xml加上
org.springframework.web.context.ContextLoaderListener
3. 接著啟動時,若applicationContext.xml沒放在WEB-INF下,就算在contextConfigLocation有指定路徑也沒用,就會出現下面的錯誤
錯誤訊息:
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext