当你使用spring& Hibernate,你有没有遇到过
的日志警告WARN o.hibernate.ejb.HibernatePersistence - HHH015016:遇到了 不推荐使用javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence];使用 [org.hibernate.jpa.HibernatePersistenceProvider]改为。
如何处理?谢谢你的回答。
答案 0 :(得分:29)
答案 1 :(得分: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();
}
您可以在此处找到使用Spring Data JPA进行Hibernate配置的一个很好的示例:http://spring.io/guides/tutorials/data/3/
答案 2 :(得分:8)
在Spring上下文中使用JPA的实体管理器时出现此问题,具有transaction-type =" RESOURCE_LOCAL"在persistence.xml中。
它并不总是一个错误。我实际配置了错误的提供程序。
我刚从
更改了persistence.xml中的提供程序<provider>org.hibernate.ejb.HibernatePersistence</provider>
到
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
它工作正常。
请注意,软件包已从 EJB 更改为 JPA
答案 3 :(得分:8)
对于未使用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 中,它应该是固定的。
答案 4 :(得分:3)
您收到此消息是因为不推荐使用类org.hibernate.ejb.HibernatePersistence
。在我的persistence.xml
文件下,我发现提供程序类有org.hibernate.ejb.HibernatePersistence
,我将其更改为org.hibernate.jpa.HibernatePersistenceProvider
,如堆栈跟踪警告消息中所述。
的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>
答案 5 :(得分:1)
将org.hibernate.ejb.HibernatePersistence
更改为org.hibernate.jpa.HibernatePersistenceProvider
中的persistence.xml
后
还要更改hibernate-entitymanager
依赖项版本,获取最新版本 5.2.10 .Final修复了该错误。这是:
http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager/5.2.10.Final
它为我工作
答案 6 :(得分:0)
我将引用更改为:
org.hibernate.jpa.HibernatePersistenceProvider
但它不起作用。
然后我删除了所有对Hibernate 4.x jar库的引用,下载了最新版本(5.2.7),然后添加了这个jar文件,它终于可以工作了。