gpt4 book ai didi

JPA persistence.xml META-INF 无法正常工作

转载 作者:行者123 更新时间:2023-12-03 22:31:35 26 4
gpt4 key购买 nike

当涉及到我的 persistence.xml 文件的位置时,我很困惑。我使用 eclipselink 2.4 作为我的 JPA 2.0 实现,并将我的 persistence.xml 放在 src/main/resources/META-INF/persistence.xml 下作为许多帖子状态。

第一期:在 eclipse 中发布到我的服务器后,我收到一条错误消息,指出找不到我的 persistence.xml。

Exception: : java.lang.IllegalArgumentException: No persistence unit named 'X'
is available in scope Webapp. Available persistence units: [] at

enter image description here

这是我的persistence.xml 的代码
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="X" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>localJTA</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.target-server" value="WebLogic"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>

如果我将 META-INF 移动到 webapp/WEB-INF/classes/META-INF 那么它就可以工作了!我无法理解问题是什么。

enter image description here

我检查了项目构建路径,那里的一切看起来都不错。

enter image description here

第二期我的问题是我的带注释的实体类没有被 eclipselink 自动获取。在我的 JPA 配置中,我自动选择了 Discover 注释类。

enter image description here

我的 xml 中也有以下内容
<exclude-unlisted-classes>false</exclude-unlisted-classes>

使用的技术:weblogic 12c 服务器、EJB 3.1、JPA 2.0、M2E-WTP 和 JSF 2.1

更新 1:将 META-INF 留在路径 src/main/resources/META-INF/persistence.xml 并执行 maven install 以构建 war 文件,META-INF 文件夹正确放置在 WEB-INF/classes/META-INF/persistence .xml 应该是这样的(在 war 中)。似乎这只是 webapp 在 Eclipse 中本地构建和运行时的问题。谁能解释一下?

更新 2:将 META-INF 留在 src/main/resources
即 src/main/resources/META-INF/persistence.xml
以及我的 persistence.xml 中的以下内容,而不是明确列出实体类
<exclude-unlisted-classes>false</exclude-unlisted-classes>

如果我构建 war 并通过 Internet Explorer 通过 weblogic 控制台部署它,则可以工作。为什么它在 eclipse 中不起作用!?

更新 3:
你有没有检查 build 的东西 - 是的,在 Eclipse 中,我已将build设置为自动。在项目文件夹中,我看到 java 包 com、包含persistence.xml 的 META-INF 文件夹和 Webapp/target/classes 下的资源文件夹。

如果 war 一样 - 您是指 C:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\Weblogic12cDomain_auto_generated_ear_\Webapp.war 中的 Webapp.war 文件夹吗?如果是这样,唯一的东西就是 WEB-INF\lib\jsf-impl-2.1.7.jar

那么您是否检查了用于在 Eclipse 中测试您的应用程序的类路径 - 该条目在我的类路径中按预期在 Webapp/.classpath 下找到

如果资源目录中的persistence.xml 首先在类路径上,它将被拾取而不是在您的war 或正确目录中的那个 - 我的理解是Eclipse将构建项目,然后将内容复制到服务器而不生成war文件。

以下是 maven 生成的 Webapp.war 的根目录:

enter image description here

这是 Webapp 项目文件夹根目录下的内容:

enter image description here

这是 C:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\Weblogic12cDomain_auto_generated_ear_\Webapp.war 下 Webapp.war 文件夹根目录下的内容

enter image description here

如果资源目录中的persistence.xml 首先在类路径上,它将被拾取,而不是在您的war 或正确目录中的那个。 - 不确定你的意思。我的资源/META-INF 中的 persistence.xml 是我想要的。不确定 war 文件与它有什么关系?无论哪种方式,它们都应该与我认为的persistence.xml 相同。

任何帮助深表感谢!!

最佳答案

JPA 规范的第 8.2.1 节指出“persistence.xml 文件位于
META-INF 持久化单元根目录。或者他们
可以通过引用指定——即,通过命名类、类文件或 XML 映射文件
(反过来引用类)可在应用程序类路径上访问”

所以持久化单元的根就是 META-INF 目录所在的目录。通过将类放在 classes 目录中,它们不在持久性单元的根目录中,因此必须显式命名以包含在内。

关于JPA persistence.xml META-INF 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078412/

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