从EntityManager获取JDBC连接

问题描述 投票:1回答:2

我有一个使用EJB 3的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>

我的数据源定义是:

<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>
jpa connection eclipselink
2个回答
0
投票

您可以使用以下方式获得连接:

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;

现在,如果您在连接池上遇到问题,请检查this tread

希望这会帮助你。

谢谢 :)


-2
投票

仅对Spring框架有效

注入:

@PersistenceContext
private EntityManager entityManager;

并使用以下方式获取连

    EntityManagerFactoryInfo info = (EntityManagerFactoryInfo) entityManager.getEntityManagerFactory();
    Connection connection = info.getDataSource().getConnection();
© www.soinside.com 2019 - 2024. All rights reserved.