2010-05-05 96 views
0

我需要通过Hibernate设置应用程序上下文。我发现在oracle.jdbc.internal.OracleConnection上有一个方法setApplicationContext。我写了一个测试,其中我从Hibernate会话中获得Oracle连接,并且它工作正常。但是,当我将代码移到在JBoss中运行的应用程序中,从该池获取连接时,该解决方案将无法工作。错误是:从JBoss Hibernate的Geeting内部Oracle连接

$ Proxy51不能转换为oracle.jdbc.internal.OracleConnection。

  1. 如何获得该环境下的内部连接?
  2. 有没有更好的方法来通过Hibernate设置应用程序上下文(文档没有提及它)。

回答

1

对了,hibernate给你的代理连接不是实际的连接。所以如果你会尝试在代理连接上设置应用程序上下文,那么它会给你的类案例异常。不过,您可以使用以下代码片段来实现相同。

 oracle.jdbc.driver.OracleConnection nativeOraConn = null; 
     oracle.jdbc.OracleConnection connection = null; 
     try { 
      java.sql.Connection connect = org.hibernate.jdbc.BorrowedConnectionProxy.getWrappedConnection(conn); 
      connection = (oracle.jdbc.OracleConnection)connect; 
      connection = connection.physicalConnectionWithin(); 
      nativeOraConn= (oracle.jdbc.driver.OracleConnection)connection; 
      nativeOraConn.setApplicationContext("context", "context", valueToSet); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

我认为这应该有效。