雙休整合下 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
參考 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麻煩多啦!我再繼續找找如何更好的整合。