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

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

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

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

它应该是

 org.hibernate.jpa.HibernatePersistenceProvider 

看看这个 。

已过时。

请改用HibernatePersistenceProvider

如果您正在使用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(); } 

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

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

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

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

 org.hibernate.ejb.HibernatePersistence 

 org.hibernate.jpa.HibernatePersistenceProvider 

它工作正常。

请注意,程序包已从EJB更改为JPA

对于不使用SPRING的用户:

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

旧:

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

新:

 PersistenceProvider provider = new HibernatePersistenceProvider(); EntityManagerFactory emf = provider.createEntityManagerFactory( PERSISTENCE_UNIT, props); 

不推荐使用的警告现在应该消失了。 这个问题仍然存在于4.3.1.Final中 。 在5.1.0.Final中它应该是固定的。

您收到此消息是因为不推荐使用org.hibernate.ejb.HibernatePersistence类。 在我的persistence.xml文件下,我发现提供者类有org.hibernate.ejb.HibernatePersistence ,我将其更改为org.hibernate.jpa.HibernatePersistenceProvider如stacktrace警告消息中所述。

persistence.xml中

  org.hibernate.jpa.HibernatePersistenceProvider Person     ....   

persistence.xml中将org.hibernate.jpa.HibernatePersistenceProvider更改为org.hibernate.jpa.HibernatePersistenceProvider之后还要更改hibernate-entitymanager依赖版本,获取修复该bug的最后一个版本5.2.10 .Final。 这是:

http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager/5.2.10.Final

它对我有用

我将引用更改为:

 org.hibernate.jpa.HibernatePersistenceProvider 

但它不起作用。

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