2010-05-05 98 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(); 
     } 

我認爲這應該有效。