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

Posted

技术标签:

【中文标题】通过 org.springframework.orm.hibernate4.LocalSessionFactoryBean 创建 HibernateTemplate【英文标题】:Creating HibernateTemplate by org.springframework.orm.hibernate4.LocalSessionFactoryBean 【发布时间】:2012-04-04 13:16:31 【问题描述】:

我使用 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>

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

我正在尝试通过 sessionFactory 通过 Java 代码创建一个 HibernateTemplate (org.springframework.orm.hibernate3.HibernateTemplate),但我不知道该怎么做.

我尝试了以下代码:

@Resource(name="sessionFactory")
public void setSessionFactory(LocalSessionFactoryBean sessionFactory) 
    this.hibernateTemplate = new HibernateTemplate(sessionFactory.getObject());

但我收到以下错误消息:

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]

你能告诉我怎么做吗?

【问题讨论】:

【参考方案1】:

你不需要在最新版本的 spring 中扩展任何 hibernate dao 支持类。您可以从基于 xml/java 的配置中直接注入 hibernate sessionfactory。它还需要注入到事务管理器中。请参阅此链接以更好地理解: http://hantsy.blogspot.in/2013/07/use-native-hibernate-4-api.html

【讨论】:

【参考方案2】:

来自this post:

不建议再使用 HibernateTemplate(大约从 hibernate 3.0.1 的发布)没有更多的附加值所以不是 将不再在那里进行休眠 4. 只需使用平原 SessionFactory 并使用 getCurrentSession 方法获取 当前事务会话(不要使用 openSession !!!!!!) 很高兴...

来自包org.springframework.orm.hibernate4的javadoc:

包含 Spring 的本地事务 SPI 的实现 休眠事务。这个包是故意相当小的, 没有模板类之类的,为了遵循原生 尽可能接近休眠建议。

【讨论】:

以上是关于通过 org.springframework.orm.hibernate4.LocalSessionFactoryBean 创建 HibernateTemplate的主要内容,如果未能解决你的问题,请参考以下文章

下拉框多选框单选框 通过TagHelper绑定数据

酶:测试孩子通过安装渲染失败,但通过浅时通过

java是通过值传递,也就是通过拷贝传递——通过方法操作不同类型的变量加深理解

通过代码进行 Spring 配置与通过注释进行配置

如何理解“不要通过共享内存来通信,而应该通过通信来共享内存”?

通过邮递员通过 API 使用 Rails 主动存储上传文件(.pdf、.jpg 等)? (不通过 Rails 视图)