jpa 遇到已弃用的javax.persistence.spi.持久性提供程序

1yjd4xko  于 2022-12-04  发布在  Java
关注(0)|答案(8)|浏览(205)

当您使用Spring和Hibernate时,是否遇到过这样的日志警告:
警告o.休眠.ejb.休眠持久性-HHH 015016:遇到了已弃用的javax.persistence.spi.持久性提供程序[org. hib.ejb. Hibernate持久性];请使用[组织.休眠.jpa.休眠持久性提供者]。
如何处理?谢谢你的回答。

pkln4tw6

pkln4tw61#

应该是

org.hibernate.jpa.HibernatePersistenceProvider

看一看this

已过时。

请改用HibernatePersistenceProvider

kx7yvsdv

kx7yvsdv2#

如果您正在使用Spring Data JPA和Java配置,则可以通过在实体管理器工厂中添加以下代码来解决此问题:
(新建休眠持久性提供者());**

@Bean
    public EntityManagerFactory entityManagerFactory() throws SQLException {

      HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
      vendorAdapter.setGenerateDdl(true);
      vendorAdapter.setShowSql(true);

      LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
      factory.setJpaVendorAdapter(vendorAdapter);
      **factory.setPersistenceProvider(new HibernatePersistenceProvider());**
      factory.setPackagesToScan("com.company.appname.persistence.domain");
      factory.setDataSource(dataSource());

      factory.setJpaProperties(hibernateProperties());
      factory.afterPropertiesSet();

      return factory.getObject();
    }

您可以在以下位置找到使用Spring Data JPA进行Hibernate配置的一个很好的示例:http://spring.io/guides/tutorials/data/3/

btqmn9zl

btqmn9zl3#

对于未使用SPRING的用户:
我们可以将标准的 * javax.persistence * 引导替换为特定于Hibernate的引导。
旧版:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(
    PERSISTENCE_UNIT, props );

新产品:

PersistenceProvider provider = new HibernatePersistenceProvider();
EntityManagerFactory emf = provider.createEntityManagerFactory(
   PERSISTENCE_UNIT, props);
  • deprecated* 警告现在应该消失了。这个问题在 4.3.1.Final 中仍然存在。在 5.1.0.Final 中应该得到修复。
llew8vvj

llew8vvj4#

在Spring上下文中使用JPA的实体管理器时出现此问题,persistence.xml中的事务类型为“RESOURCE_LOCAL”。
这并不总是一个bug。我实际上配置了错误的提供程序。
我刚刚将persistence.xml中的提供程序从

<provider>org.hibernate.ejb.HibernatePersistence</provider>

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

而且效果很好。
请注意,包已从EJB更改为JPA

g6ll5ycj

g6ll5ycj5#

你得到这个消息是因为类org.hibernate.ejb.HibernatePersistence被弃用了。在我的persistence.xml文件中,我发现提供者类有org.hibernate.ejb.HibernatePersistence,我把它改成了org.hibernate.jpa.HibernatePersistenceProvider,正如stacktrace警告消息中提到的。
persistence.xml

<persistence-unit name="personPersistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <class>Person</class>
    <properties>
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db_name"/>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
        ....
    </properties>
</persistence-unit>
7rfyedvj

7rfyedvj6#

persistence.xml中将org.hibernate.ejb.HibernatePersistence更改为org.hibernate.jpa.HibernatePersistenceProvider后,同时更改hibernate-entitymanager依赖项版本,获得最新版本5.2.10。最终版本修复了bug。如下所示:
http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager/5.2.10.Final
对我很有效

irtuqstp

irtuqstp7#

我将引用更改为:

org.hibernate.jpa.HibernatePersistenceProvider

但没有成功。
然后我删除了所有对Hibernate 4.x jar库的引用,下载了最后一个版本(5.2.7),然后添加了这个jar文件,它终于工作了。

tyg4sfes

tyg4sfes8#

如果您正在创建一个Has-A关系,并且忘记提到@Embedded,那么它将抛出相同的错误。
线程“main”javax.persistence出现异常。持久性异常:在javax.persistence.持久性.创建实体管理器工厂(Persistence.java:85)中没有名为TEST的实体管理器的持久性提供程序

相关问题