使用Hibernate 4.1执行本机查询

时间:2012-07-17 14:41:03

标签: oracle hibernate

我正在使用带有C3P0连接池的Hibernate。在Hibernate 3中,我可以通过BorrowedConnectionProxy访问包装的C3P0ProxyConnection,然后执行rawConnectionOperation。从我看到的BorrowedConnectionProxy不再是Hibernate 4.1的一部分了。

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

谢谢。

1 个答案:

答案 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的可用性,我不太确定是否有真正的好处。