かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Hibernate(やSpring?)がProxy化してるJDBCのConnectionからoracle.jdbc.Connectionを取得する方法

ちょっと古傷を触ってしまってJavaってました。

HibernateなどからConnectionを取得した時に生のJDBCのコネクションをそのまま返すのではなく、Proxy化されてOracle固有の処理をしたくて困ったことがありましたとさ。解決策としてはgetMetaDataでMedaDataを取得したあと、そこのgetConnectionでConnectionを取り直すという回り道でProxyを迂回するという方法が使えるみたいです。

参考情報

stackoverflow.com

コードとしては以下のような感じ。

Connection conn = ...Hibernateとかからコネクションとる...;
Connection nativeConnection = conn.getMetaData().getConnection();
// あとはJDBCドライバ固有の処理をお好きなように
...