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

Программисты JAVA общаются здесь
Anonymous
Как мне получить соединение внутри транзакции Spring?

Сообщение Anonymous »

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

Код: Выделить всё

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

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

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

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

Подробнее здесь: https://stackoverflow.com/questions/117 ... ransaction

Вернуться в «JAVA»