我们有一个 Spring/Hibernate 应用程序,出于性能和开发时间的原因,希望添加少量 JDBC。我可以使这个 dao 子类 HibernateDaoSupport 并使用会话的连接来执行我的 JDBC,但我宁愿使用 JdbcTemplate。然而,JdbcTemplate 是使用 java.sql.Datasource 初始化的。如何使用我现有的 Hibernate SessionFactory 来初始化它?
3 回答
您不需要为 SessionFactory 实现提供 DataSource 吗?为什么不将它连接到 JDBC 模板?
您使用的是哪个 SessionFactory 实现?如果您使用的是 Spring 实现,请参阅AbstractSessionFactoryBean.html#getDataSource()
您始终可以使用休眠会话的doWork方法——这为您提供了 java.sql.Connection。您可以使用此连接构造一个SingleConnectionDataSource(注意:第二个参数应始终为真,因为您不想关闭底层连接)并将此数据源传递给您的 JDBCTemplate...
“从我们的休眠配置中提取数据源似乎需要做很多工作”
我不明白为什么需要这么多工作。这只是创建、剪切和复制几个标签和属性的问题。
例如:
<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。这是参考:点击这里
Spring 2.0 没有 getDataSource()。这是参考:点击这里
我们的会话工厂是使用使用休眠属性初始化的 AnnotationSessionFactoryBean 创建的…… hibernateSessionFactory 是一个 SessionFactory。我将如何获得对 SessionFactoryBean 的引用?
我想知道为什么您使用 SessionFactory 而不是作为 AnnotationSessionFactoryBean 的子类的 LocalSessionFactoryBean?
bean id="hibernateSessionFactory"行不是已经引用了 SessionFactoryBean 吗?