通过org.springframework.orm.hibernate4.LocalSessionFactoryBean创建HibernateTemplate

rap*_*apt 3 spring hibernate datasource

我使用Spring 3.1 + Hibernate 4.

我创建了以下内容sessionFactory:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="myDataSource" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">validate</prop>
        </props>
    </property>
    <property name="packagesToScan" value="com.my.company"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

如您所见,上面sessionFactory是针对Hibernate 4的.

我试图HibernateTemplate通过Java代码创建一个(org.springframework.orm.hibernate3.HibernateTemplate),但我不知道如何做到这一点.sessionFactory

我试过以下代码:

@Resource(name="sessionFactory")
public void setSessionFactory(LocalSessionFactoryBean sessionFactory) {
    this.hibernateTemplate = new HibernateTemplate(sessionFactory.getObject());
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误消息:

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'sessionFactory' must be of type [org.springframework.orm.hibernate4.LocalSessionFactoryBean], but was actually of type [org.hibernate.internal.SessionFactoryImpl]
Run Code Online (Sandbox Code Playgroud)

你能说明怎么做吗?

cra*_*man 7

这篇文章:

不推荐使用HibernateTemplate(大约自hibernate 3.0.1发布以来)没有更多的附加值,因此不再适用于hibernate 4.只需使用简单的SessionFactory并使用getCurrentSession方法获取当前的事务会话(不要使用openSession !!!!),你很高兴...

从包org.springframework.orm.hibernate4的javadoc :

包含Spring的事务SPI实现,用于本地Hibernate事务.为了尽可能地遵循原生的Hibernate建议,该包有意地相当简单,没有模板类等.