gpt4 book ai didi

java - 从 NewProxyConnection 中解开 NewProxyConnection 和 GetConnection

转载 作者:行者123 更新时间:2023-12-01 04:17:25 25 4
gpt4 key购买 nike

我有以下结构:

  1. 使用 Hibernate 4.0.1 的层,使用 C3P0 作为连接池。
  2. 我没有配置数据源,我使用像这样的数据源动态配置:

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("persitenceUnit", createMap(ds)); 

“ds”是一个具有我的数据库属性的对象,例如用户、密码、url...

  1. 我通过这种方式获取 Entitymanager:

    EntityManager em = emf.createEntityManager();
  2. 我尝试通过这种方式建立连接:

    EntityManagerImpl entityManagerImpl = (EntityManagerImpl)em;
    SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl)entityManagerImpl.getSession().getSessionFactory();
    Connection con = sessionFactoryImpl.getConnectionProvider().getConnection();

但是,con 是一个 NewProxyConnection 实例。我需要执行一个返回 ORAData 的过程,并且 con.prepareCall(sqlToProcedure) 返回一个没有 getOraData 的 NewProxyCallableStatment,即此代码不起作用:

OracleCallableStatment ocs = (OracleCallableStatment)con.prepareCall('{call stp_test(?)}');   
ocs.excute();
TestObjectodf to = ocs.getOraDATA(1, TestObject.getOraDataFactory());

错误发生在

OracleCallableStatment ocs = (OracleCallableStatment)con.prepareCall('{call stp_test(?)}');

我尝试:

NewProxyConnection npCon = sessionFactoryImpl.getConnectionProvider().getConnection();
Connection con = npCon.unwrap(Connection.class);

但是不起作用。

最佳答案

如果您升级到最新版本 c3p0-0.9.5 prerelease,unwrap() 方法将起作用。版本。 unwrap() 是一种 JDBC4 方法,从 c3p0-0.9.5 开始受 c3p0 支持。由于您需要 OracleCallableStatement,因此您可能需要调用 CallableStatement 的 unwrap() 方法,而不是像上面尝试的那样调用 Connection 的 unwrap() 方法。

或者(更安全一点),对于几乎任何版本的库,您都可以使用 c3p0 的原始语句操作。 See the docs .

关于java - 从 NewProxyConnection 中解开 NewProxyConnection 和 GetConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com