天天看點

子類繼承HibernateDaoSupport後如何注入SessionFactory

子類繼承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);

下一篇: Fiddler使用