将JDBCTemplate与Hibernate SessionFactory结合使用?

将JDBCTemplate与Hibernate SessionFactory结合使用?

问题描述:

我们有一个Spring/Hibernate应用程序,并且由于涉及性能和开发时间的原因而想添加少量的JDBC。我可以使这个dao子类HibernateDaoSupport并使用会话的连接来执行我的JDBC,但我宁愿使用JdbcTemplate。但是,JdbcTemplate使用java.sql.Datasource进行初始化。我如何使用现有的Hibernate SessionFactory来初始化它?将JDBCTemplate与Hibernate SessionFactory结合使用?

您是否需要为SessionFactory实现提供一个DataSource?为什么不将它连接到JDBC模板?

您正在使用哪种SessionFactory实现?如果你正在使用Spring实现,见AbstractSessionFactoryBean.html#getDataSource()

+0

我们的会话工厂是使用AnnotationSessionFactoryBean创建并使用hibernate属性进行初始化。我们没有创建和初始化数据源。我无法从SessionFactoryBean中提取数据源,因为我不能保留对它的引用: ... hibernateSessionFactory是一个SessionFactory。如何获得对SessionFactoryBean的引用? – 2009-08-26 19:09:54

+2

您的自定义SessionFactoryBean如何构建SessionFactory? 在最糟糕的情况下,您是否至少在hibernate属性中提供了JDBC驱动程序名称和连接URL?如果是这样,您应该能够从中实例化一个DataSource,更好的是构建一个DataSource并在SessionFactoryBean和JDBCTemplate – Kevin 2009-08-26 19:27:04

+0

自定义的FactoryBean没有解决这个问题,它是AnnotationSessionFactoryBean的一个子类,我不想为了维护原因而引入另一个数据源,并且从我们的hibernate配置中提取数据源似乎就像我需要的很多工作一样。回想起来,它本应该是以这种方式创建的,但事实之后该应用程序基本上已转换为Spring。我只打算使用hibernate的createSQLQuery()而不是JdbcTemplate。谢谢您的帮助。 – 2009-08-26 21:22:44

“从我们 Hibernate配置提取数据源似乎是一个 大量的工作,我需要什么”

我不明白为什么它会花费那么多工作。这只是创建,剪切和复制一对标签和属性的问题。

例如:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource"> 
      <ref bean="dataSource"/>  
     </property> 
... 
</bean> 

“?SessionFactory的实施 是否使用的是如果你使用的 春季实施,请参见 AbstractSessionFactoryBean.html了getDataSource#()”

显然,getDataSource()仅适用于Spring 2.5。这里是参考:Click here

Spring 2.0没有getDataSource()。这里的参考:Click here

我们的会话工厂使用 AnnotationSessionFactoryBean 具有休眠特性初始化 ... hibernateSessionFactory是 SessionFactory的创建。如何获得对SessionFactoryBean的引用 ?

我想知道为什么你使用SessionFactory而不是LocalSessionFactoryBean这是AnnotationSessionFactoryBean的子类吗?

是不是行bean id =“hibernateSessionFactory”引用SessionFactoryBean已经?

+0

我想“很多工作”是一个相对术语。在我的情况下,我需要创建一个基于c3p0的数据源,并将我们的所有设置从原始属性文件转换为此文件。属性名称在Hibernate和c3p0之间的某些设置上发生变化,所以我需要验证它们。这可能需要大约一个小时才能完成并验证,但考虑到增益仅仅是在一个dao中使用JDBCTemplate,这是不值得的。 AnnotationSessionFactoryBean子类LocalSessionFactoryBean。 对会话工厂的引用并不能帮助我初始化JDBCTemplate。我需要数据源。 – 2009-09-14 20:47:20

你总是可以使用休眠会话的doWork方法 - 这会给你一个java.sql.Connection。您可以使用此连接构造一个构造SingleConnectionDataSource(注意:第二个参数应该始终为true,因为您不想关闭底层连接),并将此数据源传递到您的JDBCTemplate ...