遇到了一个已弃用的javax.persistence.spi.PersistenceProvider

eas*_*ong 27 java spring hibernate jpa

当你使用spring和Hibernate时,你有没有遇到过日志警告

警告o.hibernate.ejb.HibernatePersistence - HHH015016:遇到了一个弃用的javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; 请改用[org.hibernate.jpa.HibernatePersistenceProvider].

怎么处理?谢谢你的回答.

And*_*ter 29

它应该是

org.hibernate.jpa.HibernatePersistenceProvider
Run Code Online (Sandbox Code Playgroud)

看看这个.

已过时.

使用HibernatePersistenceProvider代替

  • 问题的原因?如何解决问题?我应该在弹簧配置中更改哪些文件? (9认同)
  • @ riship89你必须改变`persistence.xml`.@AaronHall这是错误的.我写道使用`org.hibernate.jpa.HibernatePersistenceProvider`而不是`javax.persistence.spi.PersistenceProvider`. (2认同)

小智 14

如果您正在使用Spring Data JPA和Java Configuration,您将能够解决它,在Entity Manager Factory中添加以下代码:

factory.setPersistenceProvider(new HibernatePersistenceProvider());

@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();
    }
Run Code Online (Sandbox Code Playgroud)

你会在这里找到一个使用Spring Data JPA的Hibernate配置的好例子:http://spring.io/guides/tutorials/data/3/


cri*_*pox 8

在Spring上下文中使用JPA的实体管理器时遇到此问题,在persistence.xml中使用transaction-type ="RESOURCE_LOCAL".

它并不总是一个bug.我实际配置了错误的提供程序.

我刚刚更改了persistence.xml中的提供程序

<provider>org.hibernate.ejb.HibernatePersistence</provider>
Run Code Online (Sandbox Code Playgroud)

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
Run Code Online (Sandbox Code Playgroud)

它工作正常.

请注意,包从EJB更改为JPA

  • 请停止评论它不适合您.我没有说我的评论总是一个解决方案.有时它是一种解决方案.我的评论只是检查这一点,我认为它可能很方便.正如我所说:"它并不总是一个错误.我实际上配置了错误的提供程序." 也许这是一个常见的错误. (2认同)

Hub*_*ker 8

对于不使用SPRING的用户:

我们可以用一个特定的Hibernate 替换标准的javax.persistence bootstrapping.

旧:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(
    PERSISTENCE_UNIT, props );
Run Code Online (Sandbox Code Playgroud)

新:

PersistenceProvider provider = new HibernatePersistenceProvider();
EntityManagerFactory emf = provider.createEntityManagerFactory(
   PERSISTENCE_UNIT, props);
Run Code Online (Sandbox Code Playgroud)

弃用警告现在应该走了.这个问题仍然存在于4.3.1.Final中.在5.1.0.Final中它应该是固定的.