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

时间:2014-02-11 04:30:03

标签: java spring hibernate jpa

当你使用spring& Hibernate,你有没有遇到过

的日志警告
  

WARN o.hibernate.ejb.HibernatePersistence - HHH015016:遇到了   不推荐使用javax.persistence.spi.PersistenceProvider   [org.hibernate.ejb.HibernatePersistence];使用   [org.hibernate.jpa.HibernatePersistenceProvider]改为。

如何处理?谢谢你的回答。

7 个答案:

答案 0 :(得分:29)

应该是

org.hibernate.jpa.HibernatePersistenceProvider

查看this

  

<强>弃用。

     

使用HibernatePersistenceProvider代替

答案 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 =&#34; RESOURCE_LOCAL&#34;在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文件,它终于可以工作了。