1. 程式人生 > >org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session

org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session

在整合hibernate與spring時出現如下錯誤:

Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
    at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:324)
    at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:235)
    at org.springframework.orm.hibernate3.HibernateTemplate.getSession(HibernateTemplate.java:457)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:393)
    at org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:343)

在UserDao層繼承HIbernateDaoSupport類 告訴我hibernate3出現錯誤,然後實在沒辦法,到網上去搜,

在網上找了好多相關網頁,都沒找到具體原因,總的來說就是spring4與hibernate3不相容,上網搜了結果說可以不用繼承hibernateDaoSupport類,可以直接引用sessionFactory,直接用sessionFactory獲取session物件。

    public class UserDaoImpl implements BaseDictDao{
    private SessionFactory sessionFactory;
    
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
        
    }
    @Override
    public List<BaseDict> findByTyeCode(String dict_type_code) {
    Session session=sessionFactory.openSession();
       return   session.createQuery("from BaseDict where dict_type_code=:code").setParameter("code", dict_type_code).list();
 

}

applicationContext.xml檔案裡面填寫

<bean name="userDao" class="com.top.dao.UserDaoImpl">

<property name="sessionFactory" value="sessionFactory">

</bean>

這個方法我也用了,但是不知道是自己之前搗鼓的原因還是本身的原因,結果沒出來。。。

大家可以試試,或許你們可以。

 

2.後來我發現這個辦法我行不通,我又想了另一個辦法,報錯裡面告訴我hibernate3版本與spring4不相容,但是我applicationContext.xml 裡面的dataSource都是hibernate5版本,為什麼他會報3版本,後來我想了想,有可能是我hibernateDaoSupport類導錯包了,

發現類裡面導的包是:

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

是3版本,想了想肯定是這出錯了,然後我把這個包給刪掉了,點選HibernateDaoSupport 按住ctrl+1,出現hibernate版本3,4,5三個版本,然後我重新選擇5版本,重新伺服器,在瀏覽器輸入網址,發現不報錯了。

 

一個小小的失誤,花了我一天半時間去搞它,真的是浪費青春啊 ,不說了繼續改別的程式碼了,希望這個可以幫助大家!