**问题描述:**spring整合Hibernate4的时候报如下错误:
Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:328)
at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:239)
at org.springframework.orm.hibernate3.HibernateTemplate.getSession(HibernateTemplate.java:461)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:397)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:378)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:717)
at com.bh.dao.impl.PersonDaoImpl.save(PersonDaoImpl.java:49)
at com.bh.test.HibernateTest.main(HibernateTest.java:18)
解决方案:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- 依赖注入数据源,注入正是上面定义的dataSource -->
<property name="dataSource" ref="dataSource"/>
<!-- mappingResouces属性用来列出全部映射文件 -->
<property name="mappingResources">
<list>
<!-- 以下用来列出Hibernate映射文件 -->
<value>com/bh/domain/Person.hbm.xml</value>
</list>
</property>
<!-- 定义Hibernate的SessionFactory的属性 -->
<property name="hibernateProperties">
<!-- 配置Hibernate属性 -->
<value>
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true;
</value>
</property>
</bean>
配置文件中配置的为HibernateTemplate4,但是dao中HibernateTemplate使用的却是3。
将:
import org.springframework.orm.hibernate3.HibernateTemplate;
改为:
import org.springframework.orm.hibernate4.HibernateTemplate;