解決Hibernate JPA + Spring MVC 3.2.6再次發生Lazy問題

最近使用Hibernate JPA + Spring 的方式,建立Web Application時,遇到了一個不可思議的問題。
Lazy竟然無法使用;後來移除掉原先web.xml中的org.springframework.web.servlet.DispatcherServlet類別內的initParam設定,避免引起兩份contextConfigLocation,卻反而引發更多的問題。

之前的版本在web.xml中設定Spring的設定檔 contextConfigLocation 的值為 /WEB-INF/applicationContext.xml
然後再到 applicationContext.xml 建立 LocalContainerEntityManagerFactoryBean類別實體的Bean

然而升到Spring 3.2.x以後版本,為了讓JPA建立實例後可直接用Spring方式注入,於是增加了dispatcherServlet-servlet.xml用來設定JPA的各項設定。
既然已經知道原因,所幸來個大搬風。
將原本的 web.xml中的contextConfigLocation設定改為/WEB-INF/dispatcherServlet-servlet.xml, /WEB-INF/applicationContext.xml
將原先的LocalContainerEntityManagerFactoryBean 建立實例,含Transation部分,全部移到 dispatcherServlet-servlet.xml
另外又加入了

    <bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
    	<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
    	<!-- 
    	<property name="defaultDataSource" ref="dataSource" />
    	<property name="dataSources">
    		<map>
    			<entry key="local" value-ref="dataSource" />
    		</map>
    	</property>
    	 -->
    </bean>

結果當然是恢復正常了。

廣告

About fenjj

Perfect !!??...
本篇發表於 Uncategorized。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s