かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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ドライバ固有の処理をお好きなように
...