次のコードを想像してください。
foo() {
Connection conn = ...;
}
foo()
アノテーションを持つメソッドから呼び出されました@Transactional
。現在の JDBC 接続を取得するにはどうすればよいですか? foo()
Bean 内にあることに注意してください(@Autowired
フィールドを持つことができます) が、foo()
パラメーターを持つことはできません (そのため、どこかから接続を渡すことはできません)。
[編集]データ ソースまたは接続が必要な jOOQ を使用しています。私の問題: どのトランザクション マネージャーが構成されているかわかりません。それは何でもかまいません。Java EE、DataSource ベース、JNDI 経由でデータ ソースを取得するもの。私のコードはアプリケーションではなく、ライブラリです。他の人が私の皿に載せたものを飲み込む必要があります。同様に、Hibernate セッション ファクトリを要求することもできません。これは、私を使用しているアプリケーションが Hibernate を使用していない可能性があるためです。
しかし、Spring Hibernate 統合などの他のコードは、何らかの方法でトランザクション マネージャーから現在の接続を取得できることを知っています。つまり、Hibernate は Spring のトランザクション マネージャーをサポートしていないため、グルー コードは Spring API を Hibernate が期待するものに適合させる必要があります。同じことをする必要がありますが、それがどのように機能するかわかりませんでした。
[編集 2]アクティブなトランザクションがあることはわかっています (つまり、Spring には接続インスタンスがどこかにあるか、少なくともそれを作成できるトランザクション マネージャーがあります) が、私のメソッドは @Transactional ではありません。パラメータとして受け取るコンストラクタを呼び出す必要がありjava.sql.Connection
ます。私は何をすべきか?