首页 > 解决方案 > 使用持久性 API 中的 EntityManagerFactory

问题描述

我想在 jee 环境中从 Persistence 接口获取 EntityManagerFactory 实例。但规范链接:https ://docs.oracle.com/javaee/7/api/javax/persistence/Persistence.html

陈述如下

Persistence 类在 Java EE 容器环境中也可用;但是,容器环境中不需要支持 Java SE 引导 API。

这是否意味着我们不应该使用 Persistence.createEntityManagerFactory 而不是在 java EE 环境中使用?

注意:我已经在 WAS 8.5.5 和 JBOSS EAP 7 进行了测试,并且能够成功获取 EntityManagerFactory 并执行 DB 持久性。我想知道容器是否按照规范可能会停止对这个 API 的支持?

标签: javajpajakarta-eepersistence

解决方案


如果我正确理解您的评论,您的问题是数据源在某种程度上是动态的,因此您希望使用引导 API 创建您的 EntityManagerFactory,而不是通过您的 persistence.xml 将其配置为“EE 方式”

您的数据源究竟有多动态?你在运行什么 EE 容器?您可能能够在容器配置中(即在服务器上)配置数据源,并让您的 entitymanagerfactory 由容器创建或通过 JNDI 自动获取数据源。

在以前的雇主中,我们运行 Wildfly,并在每台服务器上的 wildfly 配置中配置了数据源,让 wildfly 在标准位置提供数据源,以便 hibernate 获取和构建 EMF。

有关类似设置的示例,请参阅https://stackoverflow.com/a/41550908/691074 。

这使我们能够在连接到不同数据库(即测试、生产等)的不同服务器上运行相同的代码。

默认的 wildfly 配置已经配置了一个内存 H2 数据库,您可以修改它以指向正确的方向。

是有关数据源配置的 Wildfly 10 文档,这里是对 persistence.xml 的解释,其中包含引用容器管理的数据源的示例。

这对你的情况有用吗?


推荐阅读