在Hibernate 4中获得本地Oracle连接的句柄以运行存储过程 [英] Getting a handle to native Oracle Connection in Hibernate 4 to run a stored proc

查看:72
本文介绍了在Hibernate 4中获得本地Oracle连接的句柄以运行存储过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是使用Hibernate 4.1执行原生查询的后续工作

a>



我试过列出的答案中的选项,但是我们收到错误并且无法将代理连接解包到Or​​acle需要的本地连接中



选项2代码

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

错误

  java.lang.reflect.UndeclaredThrowableException 
ERROR [stderr](http-localhost / 127.0.0.1:8080-3)at $ Proxy64.unwrap未知来源)

选项3代码

<$ p ()连接)。getWrappedObject();返回一个新的连接。
...
}

错误

  java.lang.ClassCastException:org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6无法转换为oracle.jdbc.OracleConnection 
在oracle .sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:158)[ojdbc6.jar:11.2.0.1.0]
at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:126)[ojdbc6.jar:11.2。 0.1.0]
at com.xxx.massBookingUpdateParam(HoldoversDAO.java:312)[Business-1.jar:]
at com.xxx.saveHoldovers(HoldoversServiceBean.java:86)[Business-1 .jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[rt.jar:1.7.0]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[rt .jar:1.7.0]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[rt.jar:1.7.0]
at java.lang.reflect.Method.invoke( Method.java:601)[rt.jar:1.7.0]
at org.jboss.as.ee.component.ManagedReferenceMeth odInterceptorFactory $ ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72)[jboss-as-ee-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss。 org.jboss.invocation处的invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
。 InterceptorContext $ Invocation.proceed(InterceptorContext.java:374)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.as。在org中,焊接ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:129)[jboss-as-weld-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
。 jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:137)[jboss-as-weld-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
在org.jboss.as.ee.component.interceptors.UserInterceptorFactory $ 1.processInvocation(UserInterceptorFactory.java:36)[jboss-as-ee-7.1.2.Final-redhat-1.jar :7.1.2.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1 .1.Final-redhat-1]
在org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1 .Final-redhat-1]
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory $ 1.processInvocation(UserInterceptorFactory.java:36)[jboss-as-ee-7.1.2.Final-redhat- 1.jar:7.1.2.Final-redhat-1]
在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final-redhat-1。 jar:1.1.1.Final-redhat-1]
at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)[jboss-as-ejb3-7.1.2。 Final-redhat-1.jar:7.1.2.Final-redhat-1]
在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final-在redhat-1.jar:1.1.1.Final-redha t-1]
at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)[jboss-as-jpa-7.1.2.Final-redhat-1.jar:7.1。 2.Final-redhat-1]
在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1。 Final-redhat-1]
at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:74)[jboss-as-weld-7.1.2.Final-redhat-1.jar: 7.1.2.Final-redhat-1]
在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1。 1.Final-redhat-1]
在org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1。 Final-redhat-1]
在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final- redhat-1]
在org.jboss.in vocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.as。 ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53)[jboss-as-ee-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org。 jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)[jboss-as-ejb3-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
在org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:227)[jboss-as-ejb3-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1 ]
... 71 more

有什么建议?



我也试过这个选项 SessionFactory.openSession(Connection)in Hibernate 4 ,但该类根本不会被实例化



更新:



选项2代码正常工作。问题是我们有两个版本的ojbc.jar--一个是Jboss模块,另一个是EAR中的一个,因此就是Exception。

解决方案

<选项2代码正常工作。

ie。

OracleConnection oracleConnection = connection.unwrap(OracleConnection.class);



问题是我们有两个版本的ojbc.jar--一个是Jboss模块,另一个是EAR,因此是ClassCastException。 / p>

正如在评论中提到的,这段代码也可以工作

oracle.jdbc.driver .OracleConnection oc =(oracle.jdbc.driver.OracleConnection)connection.getMetaData()。getConnection();


This is a follow-up to Executing native query with Hibernate 4.1

I've tried the options in the listed answer but we get errors and are unable to unwrap the proxied connection into the native connection which Oracle needs

Option 2 code

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

Error

java.lang.reflect.UndeclaredThrowableException
ERROR [stderr] (http-localhost/127.0.0.1:8080-3) at $Proxy64.unwrap(Unknown Source)

Option 3 code

public void execute(Connection connection) throws SQLException {
    Connection unproxiedConnection = ( (JdbcWrapper<Connection>) connection ).getWrappedObject();
    ...
}

Error

java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 cannot be cast to oracle.jdbc.OracleConnection
at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:158) [ojdbc6.jar:11.2.0.1.0]
at oracle.sql.ArrayDescriptor.createDescriptor(ArrayDescriptor.java:126) [ojdbc6.jar:11.2.0.1.0]
at com.xxx.massBookingUpdateParam(HoldoversDAO.java:312) [Business-1.jar:]
at com.xxx.saveHoldovers(HoldoversServiceBean.java:86) [Business-1.jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0]
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72) [jboss-as-ee-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:374) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:129) [jboss-as-weld-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:137) [jboss-as-weld-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36) [jboss-as-ee-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36) [jboss-as-ee-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) [jboss-as-ejb3-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47) [jboss-as-jpa-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:74) [jboss-as-weld-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53) [jboss-as-ee-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51) [jboss-as-ejb3-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-1.jar:1.1.1.Final-redhat-1]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:227) [jboss-as-ejb3-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
... 71 more

any suggestions?

I've also tried this option SessionFactory.openSession(Connection) in Hibernate 4 but that class does not get instantiated at all

Update:

Option 2 code works correctly. The problem was we had 2 versions of ojbc.jar - one as a Jboss module and one within the EAR, hence the Exception.

解决方案

Option 2 code works correctly.

ie.

OracleConnection oracleConnection = connection.unwrap( OracleConnection.class );

The problem was we had 2 versions of ojbc.jar - one as a Jboss module and one within the EAR, hence the ClassCastException.

As mentioned in the comments, this code also works

oracle.jdbc.driver.OracleConnection oc = (oracle.jdbc.driver.OracleConnection) connection.getMetaData().getConnection();

这篇关于在Hibernate 4中获得本地Oracle连接的句柄以运行存储过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆