通过 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的主要内容,如果未能解决你的问题,请参考以下文章
java是通过值传递,也就是通过拷贝传递——通过方法操作不同类型的变量加深理解