Использование JDBCTemplate с Hibernate SessionFactory?

У нас есть приложение Spring/Hibernate, и мы хотели бы добавить небольшое количество JDBC по причинам, связанным с производительностью и временем разработки. Я могу сделать этот подкласс dao HibernateDaoSupport и использовать соединение сеанса для выполнения моего JDBC, но я бы предпочел использовать JdbcTemplate. Однако JdbcTemplate инициализируется с использованием java.sql.Datasource. Как я могу использовать существующую Hibernate SessionFactory для ее инициализации?


person Bryan Young    schedule 26.08.2009    source источник


Ответы (3)


Разве вам не нужно предоставлять DataSource для реализации SessionFactory? Почему бы вам не подключить это к шаблону JDBC?

Какую реализацию SessionFactory вы используете? Если вы используете реализации Spring, см. AbstractSessionFactoryBean.html#getDataSource()

person Kevin    schedule 26.08.2009
comment
Наша фабрика сеансов была создана с использованием AnnotationSessionFactoryBean, инициализированного со свойствами гибернации. Мы не создавали и не инициализировали DataSource. Я не могу извлечь DataSource из SessionFactoryBean, потому что не могу сохранить ссылку на него: ‹bean id=hibernateSessionFactory class=com.monsanto.tps.pipelinemanagement.server.hibernate.SessionFactoryBean› ‹property name=hibernateProperties ref =hibernateProperties/› ... hibernateSessionFactory — это SessionFactory. Как мне получить ссылку на SessionFactoryBean? - person Bryan Young; 26.08.2009
comment
Что делает ваш пользовательский SessionFactoryBean для создания SessionFactory? В худшем случае вы хотя бы указываете имя драйвера JDBC и URL-адрес подключения в свойствах гибернации? Если это так, вы сможете создать экземпляр DataSource из этого. А еще лучше, создайте DataSource и поделитесь им между SessionFactoryBean и JDBCTemplate. - person Kevin; 26.08.2009
comment
Пользовательский FactoryBean не имеет отношения к этой проблеме. Это подкласс AnnotationSessionFactoryBean. Я не хочу вводить другой источник данных по причинам обслуживания, и извлечение источника данных из нашей конфигурации спящего режима кажется большой работой для того, что мне нужно. Оглядываясь назад, можно сказать, что оно изначально должно было быть создано таким образом, но приложение, по сути, было преобразовано в Spring постфактум. Я просто собираюсь использовать createSQLQuery() из hibernate, а не JdbcTemplate. Спасибо за помощь. - person Bryan Young; 27.08.2009

Вы всегда можете использовать doWork — это дает вам java.sql.Connection. Это соединение можно использовать для создания конструкции SingleConnectionDataSource (примечание: второй аргумент всегда должен быть истинным, поскольку вы не хотите закрывать базовое соединение) и передать этот источник данных в ваш JDBCTemplate...

person Nicholas White    schedule 15.03.2010

«извлечение источника данных из нашей конфигурации гибернации кажется большим объемом работы для того, что мне нужно»

Не понимаю, зачем столько труда. Это просто вопрос создания, вырезания и копирования пары тегов и свойств.

Например:

<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 вместо LocalSessionFactoryBean, который является подклассом AnnotationSessionFactoryBean?

Разве строка bean id="hibernateSessionFactory" уже не ссылается на SessionFactoryBean?

person Mark Serrano    schedule 31.08.2009
comment
Думаю, много работы — понятие относительное. В моем случае мне нужно было бы создать источник данных на основе c3p0 и перевести все наши настройки из исходного файла свойств в этот. Имена свойств меняются в некоторых настройках между Hibernate и c3p0, поэтому мне нужно будет проверить их все. Это, вероятно, займет около часа, чтобы сделать и проверить, но, учитывая, что выигрыш заключается в простом использовании JDBCTemplate в одном дао, это не стоит времени. AnnotationSessionFactoryBean является подклассом LocalSessionFactoryBean. Ссылка на фабрику сеансов не помогает мне инициализировать JDBCTemplate. Мне нужен источник данных. - person Bryan Young; 15.09.2009