hibernate4與spring3的整合,不兼容

雙休整合下 java

整合struts2+spring3.2.1+hibernate4.2.1 spring

結果遇到問題以下問題: session


java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
	at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:323)
	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:392)
	at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
	at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:683)


檢查配置文件,沒有哪一個地方用的hibernate3呀。 框架

開始懷疑spring3,我用的是spring3提供的hibernateTemplate,懷疑hibernateTemplate用到的是hibernate3的方法。網上搜索,果真。 ssh

下面是他人的分析:「找不到方法,而我確定導入了hibernate的jar包了,在網上搜索相關的文章,有人說這是在整合ssh時常出現的錯誤,主要指版本間的不兼容,我想這兩個框架我都使用的是最新版本啊,怎麼會不兼容呢。而後去spring的jar包裏面看了一下才知道系統默認的使用的是.hibernate3.SessionFactoryUtils.doGetSession,而我使用的是hibernate4,那麼緣由確定就在這裏了,可是爲何在相同路徑下就有.hibernate4.SessionFactoryUtils.doGetSession這個爲何不調用呢?」 this


上網查了一下,主要緣由是spring認爲hibernate4的代碼寫的足夠好了,不用本身再寫一個支持類了。因此就建議使用hibernate4的hibernateDAO了。


參考 http://blog.csdn.net/gyflyx/article/details/7632645 spa

文章給出了hibernate3與hibernate4的區別,沒有給出具體的解決辦法,我等下解決了再貼上來~ .net

-------------------------------我是改進的分割線-------------------------------- hibernate

本來在DAO中將sessionFactory注入給HibernateTemplate,如今直接將sessionFactory注入給SessionFactory。而後用sessionFactory執行CRUD操做。代碼以下: code

在DAO中獲取sessionFactory

private SessionFactory sessionFactory;
@Resource(name="sessionFactory")
public void setSessionFactory(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory;
}

經過sessionFactory執行CRUD

Session session = sessionFactory.openSession();
session.beginTransaction();
session.save( new Event( "Our very first event!", new Date() ) );
session.save( new Event( "A follow up event", new Date() ) );
session.getTransaction().commit();
session.close();
這樣的改進只是經過spring將sessionFactory注入到DAO中,沒有用到spring對hibernate的封裝。代碼比hibernateTemplate麻煩多啦!我再繼續找找如何更好的整合。
相關文章
相關標籤/搜索