Как получить соединение внутри транзакции Spring?

Представьте себе этот код:

foo() {
     Connection conn =...;
}

foo()был вызван из метода с аннотацией @Transactional. Как получить текущее соединение JDBC? Обратите внимание, что foo()находится в bean-компоненте (, поэтому он может иметь @Autowiredполя ), но foo()не может иметь параметров (, поэтому я не могу передать соединение откуда-то ).

[EDIT] Я использую jOOQ, которому нужен либо источник данных, либо соединение. Моя проблема :Я не знаю, какой менеджер транзакций настроен. Это может быть что угодно; Java EE, основанный на DataSource, что-то, что получает источник данных через JNDI. Мой код не приложение, это библиотека. Мне нужно проглотить то, что другие положили на мою тарелку. Точно так же я не могу запросить фабрику сеансов Hibernate, потому что приложение, использующее меня, может не использовать Hibernate.

Но я знаю, что другой код, например интеграция Spring Hibernate, каким-то образом может получить текущее соединение от диспетчера транзакций. Я имею в виду, что Hibernate не поддерживает диспетчер транзакций Spring, поэтому связующий код должен адаптировать Spring API к тому, что ожидает Hibernate. Мне нужно сделать то же самое, но я не мог понять, как это работает.

[EDIT2] Я знаю, что есть активная транзакция (, т.е. у Spring где-то есть экземпляр Connection или, по крайней мере, диспетчер транзакций, который может создать его ), но мой метод не @ Транзакционный. Мне нужно вызвать конструктор, который принимает java.sql.Connectionв качестве параметра. Что я должен делать?

5
задан Arjan Tijms 18 June 2013 в 21:57
поделиться