Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 从EntityManager获取JDBC连接_Jpa_Connection_Eclipselink - Fatal编程技术网

Jpa 从EntityManager获取JDBC连接

Jpa 从EntityManager获取JDBC连接,jpa,connection,eclipselink,Jpa,Connection,Eclipselink,我有一个使用EJB3的web应用程序。持久性由容器管理,因此实体管理器被注入 @PersistenceContext(name="Ejbs", type=PersistenceContextType.TRANSACTION) private EntityManager em; 我需要一个EJB方法来获得jdbc连接。我已经读到,下一个代码是可能的: java.sql.Connection conn = em.unwrap(java.sql.Connection.class); 但我总是得到零

我有一个使用EJB3的web应用程序。持久性由容器管理,因此实体管理器被注入

@PersistenceContext(name="Ejbs", type=PersistenceContextType.TRANSACTION)
private EntityManager em;
我需要一个EJB方法来获得jdbc连接。我已经读到,下一个代码是可能的:

java.sql.Connection conn = em.unwrap(java.sql.Connection.class);
但我总是得到零

为什么??我如何获得底层连接

更新:

更改数据源定义后,它开始工作。我删除了数据源定义中的一行,它就开始工作了。我删除的线路是

<driver-class>oracle.jdbc.OracleDriver</driver-class>
oracle.jdbc.OracleDriver
我的数据源定义是:

<datasource jta="true" jndi-name="java:/jboss/datasources/Unificado" pool-name="Unificado" enabled="true" use-ccm="true">
      <connection-url>jdbc:oracle:thin:@10.12.54.186:1522:prd</connection-url>                    
      <driver>ojdbc6</driver>
      <security>
         <user-name>unificado</user-name>
         <password>*******</password>
      </security>
      <validation>                        
         <validate-on-match>false</validate-on-match>
         <background-validation>false</background-validation>
      </validation>
      <statement>
         <share-prepared-statements>false</share-prepared-statements>
      </statement>
</datasource>

jdbc:oracle:thin:@10.12.54.186:1522:prd
ojdbc6
统一
*******
假的
假的
假的

仅对Spring框架有效

注入:

@PersistenceContext
private EntityManager entityManager;
并通过以下方式获得连接:

    EntityManagerFactoryInfo info = (EntityManagerFactoryInfo) entityManager.getEntityManagerFactory();
    Connection connection = info.getDataSource().getConnection();

您可以通过以下方式获得连接:

Session session = entityManager.unwrap(Session.class);
session.doWork(connection -> doSomeStuffWith(connection));
你是如何得到EntityManager的

@PersistenceContext
private EntityManager entityManager;
以下是进口商品:

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.Session;
现在,如果您在连接池方面有问题,请检查

希望这对你有帮助


谢谢:)

为什么不注入EntityManager从中获取连接的数据源呢?或者使用EntityManager执行本机查询?谢谢您的回复。我不执行本机查询,因为我想执行带有blob参数的存储过程。也许JPA实现的文档对此有一些说明。我使用的一个(DataNucleus JPA)为我提供了对底层连接的内部包装的访问,我认为这与JPA实现无关。我已经在JBoss7.1上部署了该应用程序。当我在安装在Windows上的jboss中测试应用程序时,它工作正常,但当我在安装在Linux上的jboss中测试应用程序时,它不工作。您的实现是否使用hibernate?从何处导入EntityManagerFactoryInfo?仅与Spring framework相关,请将此信息添加到您的答案中