当前位置: 首页 > 知识库问答 >
问题:

在类路径中找不到任何META-INF/persistence.xml文件,但我已经添加了它

彭展
2023-03-14

我试图添加JPA到我的项目,但总是得到这些错误:

keycloak_1   | 17:28:43,494 INFO  [org.hibernate.jpa.boot.internal.PersistenceXmlParser] (default task-2) HHH000318: Could not find any META-INF/persistence.xml file in the classpath
keycloak_1   | 17:28:43,495 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-2) Uncaught server error: javax.persistence.PersistenceException: No Persistence provider for EntityManager named SQL

但是当我尝试初始化我的实体管理器时:

HashMap<String, String> properties = new HashMap<>();
properties.put("javax.persistence.jdbc.driver", configMap.getFirst(CONFIG_KEY_JDBC_URL));
properties.put("javax.persistence.jdbc.url", configMap.getFirst(CONFIG_KEY_JDBC_URL));
properties.put("javax.persistence.jdbc.user", configMap.getFirst(CONFIG_KEY_DB_USERNAME));
properties.put("javax.persistence.jdbc.password", configMap.getFirst(CONFIG_KEY_DB_PASSWORD));

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(
        "SQL",
        properties
);

EntityManager entityManager = entityManagerFactory.createEntityManager();

我收到了这些错误,但我不明白这是怎么可能的,然后我清楚地将该文件添加到我的数据库中。罐子

坚持不懈xml内容是:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
             version="2.2">
    <persistence-unit name="SQL" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="javax.persistence.jdbc.driver" value=""/>
            <property name="javax.persistence.jdbc.url" value=""/>
            <property name="javax.persistence.jdbc.user" value=""/>
            <property name="javax.persistence.jdbc.password" value=""/>
        </properties>
    </persistence-unit>
</persistence>

这里可以看到项目和编译的jar的结构(持久性内容更改为2.2版本,如前所述):

我做错了什么?

更新:即使查找命令返回文件存在于正确的目录:

➜  sql-sync-spi find . -type f -name "persistence.xml"
./build/resources/main/META-INF/persistence.xml
./src/main/resources/META-INF/persistence.xml

更多更新:我试图从另一个项目复制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="user-storage-jpa-example">
        <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>

        <class>org.keycloak.quickstart.storage.user.UserEntity</class>

        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="false" />
        </properties>
    </persistence-unit>
</persistence>

在服务启动时,我收到了致命错误:

07:03:02,188 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "sql-sync-spi-1.0-SNAPSHOT.jar")]) - failure description: {
    "WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.jboss.datasources.ExampleDS1"],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => [
        "jboss.persistenceunit.\"sql-sync-spi-1.0-SNAPSHOT.jar#sql\".__FIRST_PHASE__ is missing [jboss.naming.context.java.jboss.datasources.ExampleDS]",
        "jboss.persistenceunit.\"sql-sync-spi-1.0-SNAPSHOT.jar#sql\" is missing [jboss.naming.context.java.jboss.datasources.ExampleDS1]"
    ]
}

因此,至少在项目的一部分中肯定会看到持久性。xml文件,并尝试读取它。然后,我将xml更改回我的设置,并且再次在启动时没有错误,但在entity manager初始化尝试时,类路径中再次没有文件。

共有1个答案

颜熙云
2023-03-14

这更多的是一个评论,而不是一个答案,因为评论部分没有足够的空间,我还没有证实这一点。

首先,我要在您的密钥斗篷服务器上定义一个新的数据源。请参见:关系数据库设置。

build的依赖项部分。gradle应该看起来有点像:

dependencies {
    compileOnly 'org.keycloak:keycloak-server-spi'
    compileOnly 'org.keycloak:keycloak-common'
    implementation 'org.apache.commons:commons-lang3:3.12.0'
    compileOnly 'org.hibernate.javax.persistance:hibernate-jpa-2.1-api:1.0.0.Final'
    compileOnly 'org.jboss.spec.javax.ejb:jboss-ejb-api_3.2_spec:1.0.0.Final'

    compileOnly platform('org.wildfly.bom:wildfly-javaee8:14.0.1.Final')
    compileOnly platform('org.keycloak.bom:keycloak-spi-bom:15.0.1')
}

你的持久性。xml应该会改变,因为我们在KeyClope上定义了一个数据源:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="yourDataSource">
        <jta-data-source>your_DS_name</jta-data-source>
        <!-- List your entities here. For example: -->
        <class>com.rmndbrvn.sqlsyncspi.UserEntity</class>
    </persistence-unit>
</persistence>

然后,您可以在代码中获得EntityManager实例,如下所示:

@PersistenceContext(unitName = "yourDataSource")
EntityManager em;
 类似资料:
  • 在彻底搜索了这些论坛寻找答案后,我找不到一个类似于我的案例。 在使用maven生成WAR filer并部署我的服务器之后,每次我向需要创建DAO的API发送GET请求时,我都会在服务器控制台收到以下警告: 在类路径中找不到任何meta-inf/persistence.xml文件 和以下例外情况: 没有名为mim_ajuda的EntityManager的持久性提供程序 在进一步讨论之前,我已经搜索了

  • 我试图使用WildFly和Maven运行一个简单的EJB示例,但却停留在我应该创建一个持久性单元的阶段。因此,我创建了一个PostgreSQL数据库,配置了Wildfly数据源并编写了一个persistence.xml文件。但WAR似乎从不包含persistence.xml,所以每次尝试创建EntityManager时,我都会从Wildfly获得以下信息和错误: 11:55:57,664信息[or

  • 我知道关于这个问题还有其他问题,但没有一个解决方案对我有效。我正在使用maven在eclipse中构建一个java项目,我有我的持久性。src/main/resource/META_INF文件夹中的xml文件。但当我尝试安装mvn时,总是会出现以下错误: 从控制台输出来看,这似乎是由以下原因造成的: 这是我的persistence.xml文件: 我试着右键点击项目,并将META_INF文件夹添加到

  • 我为学校准备了一个Java小项目。我将EclipseNeon与JPA图表编辑器和JavaFX结合使用。问题- 那么,项目怎么可能找不到一个文件,而我没有更改文件夹或文件名。。。或者任何可能与路径有关的东西?我只找到了路径错误的答案,但结构是通过JPA创建的,并且有效,所以我认为这不应该是问题所在。 谢谢你的帮助,如果语法不太好,我很抱歉。

  • 为了测试Hibernate/OGM/MongoDB Docker问题,我创建了一个JUnit5测试。 我已经将persistence.xml添加到项目的文件夹中: SRC/Test/Meta-Inf 我进入了项目设置和下面: 然而,当我运行测试时,我得到: Apr 08 2019 2:36:54 PM org.hibernate.jpa.boot.internal.persistenceXMLPa

  • 我想将文件从我的>移到>文件夹。我尝试使用插件,但它只是将文件从复制到文件夹中的。但是在构建的中,文件在中不可用 我如何将我的启动文件移动到META-INF到ear>META-INF? 这是EAR的pom文件。 下面是project workspace屏幕抓取