无法使用 .xml 文件配置休眠 EntityManager 配置
Cannot configure hibernate EntityManager configuration with .xml file
我尝试使用 EntityManager 编写一些代码,但 hibernate 已更新为 hibernate-core(6.0.0.Final) 并且使用新的 hibernate 6.0 我的旧代码不起作用
这是我的代码:
我的 pom.xml
enter image description here
我的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();
这里是结果
enter image description here
thanks in advance for your help
看起来您正在混合使用 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。您可以在其他地方 Transition from Java EE to Jakarta EE 以及其他 SO 问题和答案中了解这一更大的 Java 生态系统变化。
通过包含 Hibernate Entity Manager v5 依赖项,您的项目仍将引用 Java 持久性库(例如通过 javax.persistence-api-2.2.jar
或类似库)。这意味着您的代码可能仍然可以编译——但是,如您所见,它不会执行。您将看到引用 javax
classes 的错误消息,v6 Hibernate Core 库不再支持它们。
此外,Hibernate 的 JPA 支持已合并到 hibernate-core 模块中,使 hibernate-entitymanager 模块过时。通过查看 Entity Manager 5.6.7 JAR 文件中的 readme.txt 文件,您可以看到关于此的注释:
Hibernate's JPA support has been merged into the hibernate-core module, making this hibernate-entitymanager module obsolete. This module will be removed in Hibernate ORM 6.0.
推荐步骤:
从您的 POM 中删除 hibernate-entitymanager
依赖项。这可能会触发一系列编译错误,因为您将不再有任何库支持 classes,例如 javax.persistence.EntityManager
.
将所有 javax
导入更新为 jakarta
导入。因此,例如,从上面的 (1) 中获取 class,它变成:
import jakarta.persistence.EntityManager;
- 在您的
persistence.xml
文件中,您还需要修复对 javax
的任何类似引用 - 例如:
<property name="jakarta.persistence.jdbc.driver"
value="com.mysql.jdbc.Driver" />
最后的笔记
如果按照上面的步骤还是有问题,可以参考官方的Hibernate ORM 6.0 Migration Guide.
我尝试使用 EntityManager 编写一些代码,但 hibernate 已更新为 hibernate-core(6.0.0.Final) 并且使用新的 hibernate 6.0 我的旧代码不起作用
这是我的代码: 我的 pom.xml enter image description here
我的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();
这里是结果
enter image description here
thanks in advance for your help
看起来您正在混合使用 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。您可以在其他地方 Transition from Java EE to Jakarta EE 以及其他 SO 问题和答案中了解这一更大的 Java 生态系统变化。
通过包含 Hibernate Entity Manager v5 依赖项,您的项目仍将引用 Java 持久性库(例如通过 javax.persistence-api-2.2.jar
或类似库)。这意味着您的代码可能仍然可以编译——但是,如您所见,它不会执行。您将看到引用 javax
classes 的错误消息,v6 Hibernate Core 库不再支持它们。
此外,Hibernate 的 JPA 支持已合并到 hibernate-core 模块中,使 hibernate-entitymanager 模块过时。通过查看 Entity Manager 5.6.7 JAR 文件中的 readme.txt 文件,您可以看到关于此的注释:
Hibernate's JPA support has been merged into the hibernate-core module, making this hibernate-entitymanager module obsolete. This module will be removed in Hibernate ORM 6.0.
推荐步骤:
从您的 POM 中删除
hibernate-entitymanager
依赖项。这可能会触发一系列编译错误,因为您将不再有任何库支持 classes,例如javax.persistence.EntityManager
.将所有
javax
导入更新为jakarta
导入。因此,例如,从上面的 (1) 中获取 class,它变成:
import jakarta.persistence.EntityManager;
- 在您的
persistence.xml
文件中,您还需要修复对javax
的任何类似引用 - 例如:
<property name="jakarta.persistence.jdbc.driver"
value="com.mysql.jdbc.Driver" />
最后的笔记
如果按照上面的步骤还是有问题,可以参考官方的Hibernate ORM 6.0 Migration Guide.