java - 使用持久性 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 的支持?
解决方案
如果我正确理解您的评论,您的问题是数据源在某种程度上是动态的,因此您希望使用引导 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 的解释,其中包含引用容器管理的数据源的示例。
这对你的情况有用吗?
推荐阅读
- entity-framework-core - Entity Framework Core 检查所有关系
- c# - 未找到“标签”类型
- java - 如何在java中下载上传的文件?
- object - 对象检测并发送通知
- javascript - 获取从 SQL 表到角度表的确切日期和时间
- css - 在 SCSS 中使用嵌套时,最佳实践是什么?
- python-3.x - 使用其他字典中的字典值创建字典
- terraform - terraform-provider-vsphere 自定义 windows ip 地址失败 sysprep “Windows 安装程序无法配置 Windows 以在此计算机的硬件上运行”
- docker - 从 Docker 中的用户输入发送 GET 请求?
- python - Pandas - 根据唯一值和不同列日期时间过滤 DataFrame