У нас есть приложение Spring/Hibernate и мы хотели бы добавить небольшое количество JDBC по причинам, связанным с производительностью и временем разработки. Я могу сделать этот dao подкласс HibernateDaoSupport и использовать соединение сеанса для выполнения моего JDBC, но я предпочел бы использовать JdbcTemplate. JdbcTemplate, однако, инициализируется с использованием java.sql.Datasource. Как я могу использовать мой существующий Hibernate SessionFactory для его инициализации?Использование JDBCTemplate с Hibernate SessionFactory?
ответ
Вам не нужно предоставлять источник данных для реализации SessionFactory? Почему бы вам не подключить это к шаблону JDBC?
Какую версию SessionFactory вы используете? Если вы используете реализации Spring, см AbstractSessionFactoryBean.html#getDataSource()
«извлечение источника данных из нашей конфигурации спящема кажется много работы за то, что мне нужно»
Я не понимаю, почему это займет много работы. Это всего лишь вопрос создания, вырезания и копирования нескольких тегов и свойств.
Например:
<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 инициализированных свойств Hibernate ... hibernateSessionFactory является SessionFactory. Как получить ссылку на SessionFactoryBean?
Мне интересно, почему вы использовали SessionFactory вместо LocalSessionFactoryBean, который является подклассом AnnotationSessionFactoryBean?
Не является ли линия bean id = "hibernateSessionFactory" ссылки на SessionFactoryBean уже есть?
Я думаю, что «большая работа» - относительный термин. В моем случае мне нужно было бы создать источник данных на основе c3p0 и перевести все наши настройки из исходного файла свойств на этот. Имена свойств изменяются при некоторых настройках между Hibernate и c3p0, поэтому мне нужно будет их проверить. Вероятно, потребуется около часа, чтобы проверить и проверить, но с учетом выгоды просто использовать JDBCTemplate в один дао, это не стоит времени. AnnotationSessionFactoryBean подклассы LocalSessionFactoryBean. Ссылка на фабрику сеансов не помогает мне инициализировать JDBCTemplate. Мне нужен источник данных. –
Вы всегда можете использовать метод сеанса hibernate doWork - это дает вам соединение java.sql.Connection. Вы можете использовать это соединение для построения конструкции SingleConnectionDataSource (обратите внимание: второй аргумент всегда должен быть правдой, так как вы не хотите закрывать базовое соединение) и передать этот источник данных на ваш JDBCTemplate ...
Наша фабрика сеансов была созданный с помощью AnnotationSessionFactoryBean, инициализированный свойствами спящего режима. Мы не создали и не инициализировали DataSource. Я не могу вытащить DataSource из SessionFactoryBean, потому что мне не удается сохранить ссылку на него:
Что такое пользовательский SessionFactoryBean делать, чтобы построить SessionFactory? В худшем случае, вы хотя бы предоставляете имя драйвера JDBC и URL-адрес соединения в свойствах hibernate? Если это так, вы должны иметь возможность создать экземпляр DataSource. Еще лучше постройте DataSource и разделите его между SessionFactoryBean и JDBCTemplate – Kevin
Пользовательский FactoryBean не относится к этой проблеме. Это подкласс AnnotationSessionFactoryBean. Я не хочу вводить другой источник данных для поддержания причин, а извлечение источника данных из нашей конфигурации спящего режима выглядит Мне нравится много работы за то, что мне нужно. Оглядываясь назад, он должен был быть создан таким образом, в первую очередь, но приложение по сути было преобразовано в Spring после факта. Я просто использую hibernate createSQLQuery(), а не JdbcTemplate. Спасибо за помощь. –