Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: Deprecated PersistenceProvider, use HibernatePersistenceProvider instead of HibernatePersistence

Tags:

java

hibernate

I think this is a very common problem for all beginners like me. But I could not find a solution. Yet.

File persistence.xml is in src/META-INF/persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="jobs">

    <!-- provedor/implementacao do JPA -->
    <provider>org.hibernate.ejb.HibernatePersistenceProvider</provider>

    <!-- entidade mapeada -->
    <class>
        br.com.caelum.tarefas.modelo.Job
    </class>

    <properties>
        <!-- dados da conexao -->
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/fj21" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="root" />

        <!-- propriedades do hibernate -->
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />

        <!-- atualiza o banco, gera as tabelas se for preciso -->
        <property name="hibernate.hbm2ddl.auto" value="update" />

    </properties>
</persistence-unit>

When I run the code

try
{
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("tarefas");
    EntityManager manager = factory.createEntityManager();

    manager.close();
    factory.close();
    System.out.println("Execução com sucesso!");
}catch(Exception _Ex)
{
    System.out.println("Erro: " + _Ex.getMessage());
}

I get the message

27/03/2014 11:35:18 org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
27/03/2014 11:35:18 org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
27/03/2014 11:35:18 org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
Erro: No Persistence provider for EntityManager named jobs

What I'm doing wrong?

like image 502
user3411221 Avatar asked Mar 27 '14 14:03

user3411221


2 Answers

The problem is in this line from persistence.xml file:

<!-- provedor/implementacao do JPA -->
<provider>org.hibernate.ejb.HibernatePersistenceProvider</provider>

It should be changed to

<!-- provedor/implementacao do JPA -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

Even when provider tag is missing in persistence.xml, because of Hibernate bug, Hibernate will use the old ejb provider implementation, and then it will complain about that (schizophrenia)

like image 97
aurelije Avatar answered Sep 29 '22 05:09

aurelije


The solution by aurelije is correct, however a bug in Hibernate will incorrectly report an issue even when you specify the correct HibernatePersistenceProvider: all details on the bug can be found in bug report HHH-9141 and exist in Hibernate EntityManager version 4.3.5.Final.

like image 32
deucalion Avatar answered Sep 29 '22 07:09

deucalion