我试图添加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初始化尝试时,类路径中再次没有文件。
这更多的是一个评论,而不是一个答案,因为评论部分没有足够的空间,我还没有证实这一点。
首先,我要在您的密钥斗篷服务器上定义一个新的数据源。请参见:关系数据库设置。
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屏幕抓取