我嘗試使用 EntityManager 撰寫一些代碼,但休眠已更新為休眠核心(6.0.0.Final)并且使用新的休眠 6.0 我的舊代碼不起作用
那里有我的代碼:我的 pom.xml 在此處輸入影像描述
我的 persistence.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_1.xsd"
version="2.1">
<persistence-unit name="CRM">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5678/postgres"/>
<property name="hibernate.connection.username" value="postgres"/>
<property name="hibernate.connection.password" value="postgres"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
和我的主要方法
EntityManagerFactory entityManagerFactory =
Persistence.createEntityManagerFactory("CRM");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist(new SuperHero());
entityManager.getTransaction().commit();
entityManager.close();
entityManagerFactory.close();
這里結果
在此處輸入影像描述
在此先感謝您的幫助
uj5u.com熱心網友回復:
看起來好像您正在混合 2 個不兼容版本的 Hibernate 資源:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.0.0.Final</version>
</dependency>
和:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.7.Final</version>
</dependency>
從 v6 開始,Hibernate 庫已經從使用 Java Persistence 轉移到 Jakarta Persistence。您可以在其他地方了解這個更大的 Java 生態系統變化從 Java EE 到 Jakarta EE 的過渡- 以及其他 SO 問題和答案。
通過包含 Hibernate Entity Manager v5 依賴項,您的專案仍將參考 Java Persistence 庫(例如 viajavax.persistence-api-2.2.jar或類似庫)。這意味著您的代碼仍然可以編譯——但是,如您所見,它不會執行。您將看到參考javax類的錯誤訊息,v6 Hibernate Core 庫不再支持這些類。
此外,Hibernate 的 JPA 支持已合并到 hibernate-core 模塊中,從而使 hibernate-entitymanager 模塊過時。您可以通過查看 Entity Manager 5.6.7 JAR 檔案中的 readme.txt 檔案來查看有關此內容的注釋:
Hibernate 的 JPA 支持已合并到 hibernate-core 模塊中,使這個 hibernate-entitymanager 模塊過時。這個模塊將在 Hibernate ORM 6.0 中洗掉。
推薦步驟:
hibernate-entitymanager從您的 POM 中洗掉依賴項。這可能會觸發一系列編譯錯誤,因為您將不再有任何類別庫支持,例如javax.persistence.EntityManager.將所有
javax匯入更新為jakarta匯入。因此,例如,從上面的 (1) 中獲取類,就變成了:
import jakarta.persistence.EntityManager;
- 在您的
persistence.xml檔案中,您還需要修復任何類似的參考javax- 例如:
<property name="jakarta.persistence.jdbc.driver"
value="com.mysql.jdbc.Driver" />
最后的筆記
如果您按照上述步驟仍然遇到問題,那么您可以參考官方的 Hibernate ORM 6.0 遷移指南。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/463970.html
