2013年3月24日 星期日

當Spring MVC+Hibernate搭配的時候出現 No Hibernate Session bound to thread


SpringMVC + Hibernate Error: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here.


這個惱人的問題在於Spring MVC 的設定方式。
首先你的DispatchServlet 對應的xml先找出來
你應該有設定
<context:component-scan base-package="tw" />
這一類的東西。
如果tw是你的根目錄,Spring 就會開始掃瞄所有有annotation的bean並加入管理。
你應該有另一個xml 是管理Spring 交易的,它那邊也會有一個
<context:component-scan base-package="tw" />
因為第一個scan已經把所有的bean load進來了,在交易管理的那個scan變成完全沒作用了。

這樣會導致Spring 的交易沒有被注入,也就是你會因此看到這個錯誤訊息。

解決方法就是把二者的類別錯開,盡量讓spring mvc的scan只掃controller的目錄,不要去掃到Service 層的類別。

讓交易的那個xml去掃service那一層,這樣交易才會被注進去。

1 則留言: