Erro no Eclipse Java EE x JPA x Hibernate (Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named tarefas)

7 respostas Resolvido
E

Alguém pode me ajudar?

Ja olhei vários fóruns e segui todas as orientacoes passadas, mas nao consegui descobrir meu problema.

Estou estudando JPA + Hibernate e estou tendo esse erro ao tentar gerar a tabela no MySQL.

Exception in thread “main” javax.persistence.PersistenceException: No Persistence provider for EntityManager named tarefas

1) Meu arquivo “persistence.xml” esta na pasta correta (src / META-INF):

2) Segue o arquivo “persistence.xml”:

3) Segue minha classe “Tarefa”:

package br.com.caelum.tarefas.modelo;

import java.util.Calendar;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Temporal;

import javax.persistence.TemporalType;

import javax.validation.constraints.NotNull;

import javax.validation.constraints.Size;

import org.springframework.format.annotation.DateTimeFormat;
@Entity

public class Tarefa {

@Id

private Long id;
private String descricao;

private Boolean finalizado;

private Calendar dataFinalizacao;
   
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
public String getDescricao() {
    return descricao;
}
public void setDescricao(String descricao) {
    this.descricao = descricao;
}
public Boolean getFinalizado() {
    return finalizado;
}
public void setFinalizado(Boolean finalizado) {
    this.finalizado = finalizado;
}
public Calendar getDataFinalizacao() {
    return dataFinalizacao;
}
public void setDataFinalizacao(Calendar dataFinalizacao) {
    this.dataFinalizacao = dataFinalizacao;
}

}

4) Segue o "Gerador da tabela":

package br.com.caelum.tarefas.jpa;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

public class GeraTabelas {

public static void main(String[] args) {

EntityManagerFactory factory = Persistence.

createEntityManagerFactory(tarefas);

factory.close();

}

}

5) Segue a relação dos .JARs que estao no Classpath:

antlr-2.7.7.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.2.4.Final.jar
hibernate-entitymanager-4.3.7.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.0.Final.jar
javassist-3.20.0-GA.jar
jboss-logging-3.3.0-GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
slf4j-api-1.7.21.jar
slf4j-log4j12-1.7.21.jar

7 Respostas

E

Consegui resolver o problema após passar a usar a versao anterior do hibernate (hibernate-release-4.3.5.Final). Eu estava usando a versao (hibernate-release-5.2.4.Final). Apaguei todos os .JAR e copiei novamente da nova versao.

Porem agora surgiu outro erro e estou tentando resolver aqui.

nov 22, 2016 7:39:36 PM org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. nov 22, 2016 7:39:36 PM org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. nov 22, 2016 7:39:36 PM org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. nov 22, 2016 7:39:36 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [ name: tarefas ...] nov 22, 2016 7:39:36 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.3.5.Final} nov 22, 2016 7:39:36 PM org.hibernate.cfg.Environment INFO: HHH000206: hibernate.properties not found nov 22, 2016 7:39:36 PM org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist nov 22, 2016 7:39:37 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final} nov 22, 2016 7:39:37 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) nov 22, 2016 7:39:37 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost/fj21] nov 22, 2016 7:39:37 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000046: Connection properties: {user=root, password=****} nov 22, 2016 7:39:37 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000006: Autocommit mode: false nov 22, 2016 7:39:37 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 (min=1) Tue Nov 22 19:39:37 BRST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification. nov 22, 2016 7:39:37 PM org.hibernate.dialect.Dialect INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect nov 22, 2016 7:39:38 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory INFO: HHH000397: Using ASTQueryTranslatorFactory SLF4J: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError. SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details. Exception in thread "main" javax.persistence.PersistenceException: Unable to build entity manager factory at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:83) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39) at br.com.caelum.tarefas.jpa.GeraTabelas.main(GeraTabelas.java:11) Caused by: org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:154) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:312) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845) at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75) ... 4 more Caused by: java.lang.ExceptionInInitializerError at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:72) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:45) at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124) at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357) at org.hibernate.validator.util.LoggerFactory.make(LoggerFactory.java:29) at org.hibernate.validator.util.Version.(Version.java:30) at org.hibernate.validator.engine.ConfigurationImpl.(ConfigurationImpl.java:59) at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:43) at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:269) at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:459) at org.hibernate.cfg.beanvalidation.TypeSafeActivator.activate(TypeSafeActivator.java:97) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:148) ... 11 more Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details. at org.slf4j.impl.Log4jLoggerFactory.(Log4jLoggerFactory.java:54) ... 30 more
E

Fiz duas mudanças no meu projeto:

1) Mudei as anotacoes no modelo (Classe Tarefa):

@Entity

@Table(name = tarefa)

public class Tarefa {

@Id
@GeneratedValue
private Long id;

@Column(nullable = false, length = 5)
private String descricao;

@Column
private boolean finalizado;

@Temporal(TemporalType.TIMESTAMP)

@Column(name = data_finalizacao)

private Calendar dataFinalizacao;

2) Mudei a Classe GeraTabelas:

package br.com.caelum.tarefas.jpa;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

public class GeraTabelas {

public static void main(String[] args) {
    
EntityManagerFactory factory = Persistence.createEntityManagerFactory("tarefas");
EntityManager eManager = factory.createEntityManager();
eManager.getTransaction().begin();        
eManager.close();
}

}

E continua dando o erro conforme acima.

Alguem pode me ajudar?

D

Ola, seu JARS devem está na pasta lib do seu projeto quando se trata de um projeto JEE.

segue o caminho : WebContent/WEB-INF/lib

agora quando você descompactou do hibernate-release-4.3.5.Final.zip, tem algumas pasta contendo os jars. no seu projeto irá somente colocar todos dos jar da pasta : REQUIRED e JPA .

{ },s.

E

Sim, os meus jars estao todos na pasta WebContent/WEB-INF/lib e no Build Path conforme imagens abaixo.

O erro agora eh outro
SLF4J: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path

D
Solucao aceita

So deixe o JARS na PASTA LIB . retire o BUILD PATH não há necessidade.
não tenho certeza mas acho que voce não precisa do slf4j-api e slf4j-log

E

Fiz conforme voce me orientou:

  • Retirei todos os jars do BUILD PATH
  • Apaguei os jars slf4j-api e slf4j-log da WebContent/WEB-INF/lib

Alem disso:

  • Acrescentei o log4j-1.2.9.jar na WebContent/WEB-INF/lib pois estava faltando.
  • Apaguei o jar log4j-over-slf4j-1.7.21 da WebContent/WEB-INF/lib pois estava sobrando
  • Criei o arquivo log4j.properties na WebContent/WEB-INF/classes

Arquivo log4j.properties :

log4j.rootLogger=info, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.logger.org.hibernate.tool.hbm2ddl=debug
log4j.logger.org.hibernate.testing.cache=debug
log4j.logger.org.hibernate=info

Com essas alteracoes o Hibernate funcionou e a tabela foi criada no MySQL.

D

perfeito. bons estudos.

{ },s.

Criado 22 de novembro de 2016
Ultima resposta 23 de nov. de 2016
Respostas 7
Participantes 2