Получение соединения с базой данных в чистой настройке JPA

У нас есть приложение JPA (использующее hibernate), и нам нужно передать вызов унаследованному инструменту отчетности, которому в качестве параметра требуется соединение с базой данных JDBC. Есть ли простой способ получить доступ к JDBC-соединению, которое есть в hibernate?

59
задан Pascal Thivent 16 August 2010 в 20:51
поделиться

2 ответа

Где вы хотите получить эту связь, неясно. Одна из возможностей - получить его из базовой сессии Hibernate Session, используемой EntityManager. В JPA 1.0 вам придется сделать что-то вроде этого:

Session session = (Session)em.getDelegate();
Connection conn = session.connection();

Обратите внимание, что getDelegate() не переносится, результат этого метода зависит от реализации: приведенный выше код работает в JBoss, для GlassFish вам придется его адаптировать - посмотрите Будьте осторожны при использовании EntityManager.getDelegate().

В JPA 2.0 дела обстоят немного лучше, и вы можете сделать следующее:

Connection conn = em.unwrap(Session.class).connection();

Если вы работаете внутри контейнера, вы также можете выполнить поиск по настроенному DataSource.

51
ответ дан 24 November 2019 в 18:01
поделиться

Hibernate внутренне использует ConnectionProvider для получения соединений. Из javadoc спящего режима:

Интерфейс ConnectionProvider не предназначен для предоставления приложению. Вместо этого он используется внутри Hibernate для получения соединений.

Более элегантный способ решить эту проблему - создать пул соединений с базой данных самостоятельно и вручную подключать к спящему режиму и вашему унаследованному инструменту оттуда.

2
ответ дан 24 November 2019 в 18:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: