2

我正在使用带有 C3P0 连接池的 Hibernate。在 Hibernate 3 中,我可以通过访问包装的 C3P0ProxyConnectionBorrowedConnectionProxy然后执行rawConnectionOperation. 据我所知BorrowedConnectionProxy,它不再是 Hibernate 4.1 的一部分。

有什么方法可以运行供应商特定的查询吗?(里面的代理连接实例Work.execute对我不起作用,我需要执行 Oracle 存储过程来收集自定义对象类型)。

谢谢你 。

4

1 回答 1

4

您可以通过调用以下方式访问未代理的工作连接:

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

这种形式利用了 JDBC 4 的 unwrap 方法,我们只是将它委托给底层连接。或者,如果您特别需要 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();
    ...
}

在考虑允许作品表示它想要一个未经代理的连接方面,我来回考虑,但考虑到 Connection#unwrap 的可用性,我不太确定是否有真正的好处。

于 2012-07-17T18:25:06.897 回答