我正在使用带有C3P0连接池的Hibernate。在Hibernate 3中,我可以通过BorrowedConnectionProxy
访问包装的C3P0ProxyConnection,然后执行rawConnectionOperation
。从我看到的BorrowedConnectionProxy
不再是Hibernate 4.1的一部分了。
我可以运行特定于供应商的查询吗? (Work.execute
中的代理连接实例对我不起作用,我需要执行收集自定义对象类型的Oracle存储过程。)
谢谢。
答案 0 :(得分:4)
您可以通过调用以下方式访问未经处理的Connection in:
public void execute(Connection connection) throws SQLException {
Connection unproxiedConnection = connection.unwrap( Connection.class );
...
}
该表单利用JDBC 4解包方法,我们只是将其委托给底层连接。或者,如果您特别需要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的可用性,我不太确定是否有真正的好处。