无法使用 .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.

推荐步骤:

  1. 从您的 POM 中删除 hibernate-entitymanager 依赖项。这可能会触发一系列编译错误,因为您将不再有任何库支持 classes,例如 javax.persistence.EntityManager.

  2. 将所有 javax 导入更新为 jakarta 导入。因此,例如,从上面的 (1) 中获取 class,它变成:

import jakarta.persistence.EntityManager;
  1. 在您的 persistence.xml 文件中,您还需要修复对 javax 的任何类似引用 - 例如:
<property name="jakarta.persistence.jdbc.driver" 
          value="com.mysql.jdbc.Driver" />

最后的笔记

如果按照上面的步骤还是有问题,可以参考官方的Hibernate ORM 6.0 Migration Guide.