子類繼承hibernatedaosupport後,由于hibernatedaosupport,setsessionfactory是使用final修飾的,無法重寫,沒有辦法使用註解的方式注入sessionfactroy
public final void setsessionfactory(sessionfactory sessionfactory) {
if (this.hibernatetemplate == null || sessionfactory != this.hibernatetemplate.getsessionfactory()) {
this.hibernatetemplate = createhibernatetemplate(sessionfactory);
}
}
我們可以變通一下,自己定義一個方法,這個方法去調用hibernatedaosupport 中的setsessionfacotry方法,達到注入sessionfactory的目的。
@autowired
public void setsupersessionfactory(sessionfactory sessionfactory) {
super.setsessionfactory(sessionfactory);
}
this.gethibernatetemplate().save()方法報錯的問題
invaliddataaccessapiusageexception: write operations are not allowed in read-only mode (flushmode.manual): turn your session into flushmode.commit/auto or remove 'readonly' marker from transaction definition.
兩步:
1.web.xml中打開懶加載
<!-- 懶加載 -->
<filter>
<filter-name>opensessioninviewfilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.opensessioninviewfilter</filter-class>
</filter>
<filter-mapping>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.在執行save之前加這麼一句:this.gethibernatetemplate().getsessionfactory().getcurrentsession().setflushmode(flushmode.auto)
this.gethibernatetemplate().getsessionfactory().getcurrentsession().setflushmode(flushmode.auto);
this.gethibernatetemplate().save(historyarcticlesrequest);