gpt4 book ai didi

jpa - 从 EntityManager 获取 JDBC 连接

转载 作者:行者123 更新时间:2023-12-03 09:22:49 50 4
gpt4 key购买 nike

我有一个使用 EJB 3 的 Web 应用程序。持久性由容器管理,因此注入(inject)了实体管理器。

@PersistenceContext(name="Ejbs", type=PersistenceContextType.TRANSACTION)
private EntityManager em;

我需要在我的 EJB 方法之一中获取 jdbc 连接。我读到以下代码是可能的:

java.sql.Connection conn = em.unwrap(java.sql.Connection.class);

但我总是得到 null。

为什么?如何获取底层连接?

更新:

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

<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>

最佳答案

仅对 Spring 框架有效

注入(inject):

@PersistenceContext
private EntityManager entityManager;

并使用以下方式获取连接:

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

关于jpa - 从 EntityManager 获取 JDBC 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28155496/

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