遇到了一个已弃用的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文件,它终于可以工作了。