将 JDBCTemplate 与 Hibernate SessionFactory 一起使用?
Posted
技术标签:
【中文标题】将 JDBCTemplate 与 Hibernate SessionFactory 一起使用?【英文标题】:Using JDBCTemplate with a Hibernate SessionFactory? 【发布时间】:2009-08-26 18:22:29 【问题描述】:我们有一个 Spring/Hibernate 应用程序,出于性能和开发时间的原因,希望添加少量 JDBC。我可以使这个 dao 子类 HibernateDaoSupport 并使用会话的连接来执行我的 JDBC,但我宁愿使用 JdbcTemplate。然而,JdbcTemplate 是使用 java.sql.Datasource 初始化的。如何使用现有的 Hibernate SessionFactory 对其进行初始化?
【问题讨论】:
【参考方案1】:您是否不需要为 SessionFactory 实现提供数据源?为什么不将它连接到 JDBC 模板?
您使用的是哪个 SessionFactory 实现?如果您使用的是 Spring 实现,请参阅 AbstractSessionFactoryBean.html#getDataSource()
【讨论】:
我们的会话工厂是使用使用休眠属性初始化的 AnnotationSessionFactoryBean 创建的。我们没有创建和初始化数据源。我无法从 SessionFactoryBean 中提取数据源,因为我无法保留对它的引用:您始终可以使用休眠会话的doWork 方法 - 这会为您提供 java.sql.Connection。您可以使用此连接构造一个 SingleConnectionDataSource 构造(注意:第二个参数应始终为真,因为您不想关闭底层连接)并将此数据源传递给您的 JDBCTemplate...
【讨论】:
【参考方案3】:"从我们的 休眠配置似乎 我需要做很多工作”
我不明白为什么需要这么多工作。只需创建、剪切和复制几个标签和属性。
例如:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
...
</bean>
"哪个SessionFactory实现 你正在用吗?如果您正在使用 Spring 实现,请参阅 AbstractSessionFactoryBean.html#getDataSource()"
显然,getDataSource() 仅适用于 Spring 2.5。这是参考:Click here
Spring 2.0 没有 getDataSource()。这是参考:Click here
我们的会话工厂是使用 AnnotationSessionFactoryBean 用休眠属性初始化 ... hibernateSessionFactory 是一个 会话工厂。我怎么会得到一个 引用 SessionFactoryBean?
我想知道您为什么使用 SessionFactory 而不是作为 AnnotationSessionFactoryBean 子类的 LocalSessionFactoryBean?
bean id="hibernateSessionFactory" 行不是已经引用了 SessionFactoryBean 吗?
【讨论】:
我猜“很多工作”是一个相对术语。就我而言,我需要创建一个基于 c3p0 的数据源,并将我们所有的设置从原始属性文件转换为这个文件。在 Hibernate 和 c3p0 之间的某些设置上,属性名称会发生变化,因此我需要全部验证它们。完成和验证可能需要大约一个小时,但考虑到收益只是在一个 dao 中使用 JDBCTemplate,不值得花时间。 AnnotationSessionFactoryBean 是 LocalSessionFactoryBean 的子类。对会话工厂的引用并不能帮助我初始化 JDBCTemplate。我需要数据源。以上是关于将 JDBCTemplate 与 Hibernate SessionFactory 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章