2

C3P0 接続プールで Hibernate を使用しています。Hibernate 3 では、ラップされた C3P0ProxyConnection にアクセスしてからBorrowedConnectionProxy実行できrawConnectionOperationました。私が見たところBorrowedConnectionProxy、Hibernate 4.1 の一部ではなくなりました。

ベンダー固有のクエリを実行する方法はありますか? (内部のプロキシ接続のインスタンスはWork.execute機能しません。カスタム オブジェクト タイプのコレクションを取得する Oracle ストアド プロシージャを実行する必要があります)。

ありがとうございました 。

4

1 に答える 1

4

次のコマンドを呼び出すことで、プロキシされていないConnectioninWorkにアクセスできます。

public void execute(Connection connection) throws SQLException {
    Connection unproxiedConnection = connection.unwrap( Connection.class );
    ...
}

このフォームはJDBC4unwrapメソッドを利用しており、基礎となる接続にそれを委任するだけです。または、特にOracleConnectionが必要な場合:

public void execute(Connection connection) throws SQLException {
    OracleConnection oracleConnection = connection.unwrap( OracleConnection.class );
    ...
}

次のものも使用できます。

public void execute(Connection connection) throws SQLException {
    Connection unproxiedConnection = ( (JdbcWrapper<Connection>) connection ).getWrappedObject();
    ...
}

Workがプロキシされていない接続を必要としていることを示すことを許可することを検討するという点で私は行き来しましたが、Connection#unwrapが利用可能であることを考えると、本当のメリットがあるかどうかはわかりません。

于 2012-07-17T18:25:06.897 に答える