[英]Error: 'No Persistence provider for EntityManager' under Hibernate 5.3.0.Beta1
在Eclipse中,我設置了一個新的maven項目,我想嘗試一些數據庫連接。 所以我創建了一個User.java,它是我的實體和DataBaseConnector.java
,我在那里嘗試db連接,但是我收到一個錯誤:
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named mysql-database
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at database.DataBaseConnector.getTestConnection(DataBaseConnector.java:21)
at database.DataBaseConnector.main(DataBaseConnector.java:14)
我當前版本的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="2.0">
<persistence-unit name="mysql-database" transaction-type="RESOURCE_LOCAL">
<description>DataBase Connection</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<validation-mode>NONE</validation-mode>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/sharifo" />
<property name="javax.persistence.jdbc.user" value="admin" />
<property name="javax.persistence.jdbc.password" value="1234" />
<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /-->
<!-- <property name="hibernate.show_sql" value="true" /-->
<!-- <property name="hibernate.hbm2ddl.auto" value="create" /-->
</properties>
</persistence-unit>
</persistence>
的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>backend</groupId>
<artifactId>shareifo</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.2.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.8-dmr</version>
</dependency>
</dependencies>
</project>
我覺得persistence.xml可能配置錯誤,所以我也在github上傳了我的項目: https : //github.com/ViFire/sherifo-backend.git 。
我不知道如何修復或處理此錯誤。 你有我的小竅門嗎?
我通過您提供的GitHub項目鏈接檢查了代碼。 必須改變兩件事:
從pom.xml
刪除現在過時的依賴項:
<dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.2.Final</version> </dependency>
注意 :不再需要此依賴項,甚至可能在運行時混淆,因為Hibernate 5.3.xyz現在依賴於javax.persistence:javax.persistence-api:2.2
,官方JPA 2.2 規范 -jar。
更改persistence.xml
,使其如下所示:
<?xml version="1.0" encoding="UTF-8"?> <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_1.xsd" version="2.1"> <persistence-unit name="mysql-database" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <validation-mode>NONE</validation-mode> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/sharifo" /> <property name="javax.persistence.jdbc.user" value="admin" /> <property name="javax.persistence.jdbc.password" value="1234" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <!-- <property name="hibernate.show_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create"/> --> </properties> </persistence-unit> </persistence>
注意 ,
provider
是: org.hibernate.jpa.HibernatePersistenceProvider
, jdbc.driver
是: com.mysql.cj.jdbc.Driver
。 在調試/測試時,我發現Hibernate的5.3.0.Beta1版本似乎與最新的穩定版本不同: 5.2.17.Final 。 您觀察到的“誤導性”錯誤消息將被拋出,即使所有內容都按上述方式設置。
對我來說這有一個簡單的原因:如果數據庫無法訪問或憑據不正確,您還會遇到以下消息:
沒有名為xyz的EntityManager的持久性提供程序...
這是 - 恕我直言 - 在這種情況下完全混淆。 使用Hibernate 5.2.x .Final,您會在失敗的連接嘗試時收到錯誤消息,包括一個更精確的調試輸出,用於准確查找內容。
由於上述原因: 仔細檢查用戶/ pw,JDBC url / hostname是否正確,因為這可能會導致一個令人困惑的錯誤消息,即對於實際可用並正確配置的持久性單元,不存在持久性提供程序。
作為獎勵,我將在您的GitHub項目上打開一個Pull請求(PR),您可以查看詳細信息。 我希望您將此PR整合到您的項目中,以便您直接受益。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.