Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[PersistenceUnit: livraria] Unable to build EntityManagerFactory

Unable to build entity manager factory

Erro ao criar o entity Manager. Olhei em outros fóruns com o mesmo problema mas as descrições de resolução estão vagas e não consegui extrair informação para resolver a questão.

Exception in thread "main" java.lang.ExceptionInInitializerError
    at br.com.caelum.livraria.dao.PopulaBanco.main(PopulaBanco.java:17)
Caused by: 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.livraria.dao.JPAUtil.<clinit>(JPAUtil.java:10)
    ... 1 more
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.<init>(SessionFactoryImpl.java:312)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859)
    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:398)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
    ... 5 more
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:468)
    at org.jboss.logging.Logger$1.run(Logger.java:2252)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2227)
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2214)
    at org.hibernate.validator.internal.util.logging.LoggerFactory.make(LoggerFactory.java:28)
    at org.hibernate.validator.internal.util.Version.<clinit>(Version.java:27)
    at org.hibernate.validator.internal.engine.ConfigurationImpl.<clinit>(ConfigurationImpl.java:63)
    at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41)
    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 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:148)
<?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="livraria" transaction-type="RESOURCE_LOCAL">

           <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <class>br.com.caelum.livraria.modelo.Livro</class>
        <class>br.com.caelum.livraria.modelo.Autor</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/livrariadb" />
            <property name="javax.persistence.jdbc.user" value="demo" />
            <property name="javax.persistence.jdbc.password" value="demo" />

            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        </properties>
    </persist
2 respostas

Oi Jéferson,

A partir do Java 9 entrou um novo sistema do módulos no mundo Java. O erro abaixo está relacionado a isso:

Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

Em outras palavras, o JaxB vem junto com o JRE mas não é carregado automaticamente. Como o Hibernate acha que o modulo foi carregado (como era antes), vc recebeu o erro NoClassDefFoundError.

A noticia boa é que vc pode pedir pra a JVM que ela carregue esse modulo e tudo volte a funcionar. Segue um artigo de um instrutor da caelum que explica como resolver e adicionar o modulo:

https://alexandreaquiles.com.br/2017/10/13/sofrencia-com-java-9-cade-meu-jaxb/

solução!

Analisando com mais calma verifiquei que meu projeto apontava para uma instacia da JRE versã0 15. Com isso ele realmente dava o problema citado acima. No meu caso achei por bem ajustar nas configurações do projeto para se basear na JRE 8 . Para que seja util para outras pessoas que passem pelo mesmo problema que o meu segue um pequeno passo a passo:

-> Ja no projeto Expanda a Área "Libraries" ->Em "JRE System Library" verifique se a versão da JRE é a desejada (no meu caso a desejada era a JAVA SE 1.8 mas estava apontando para JAVA SE 15.0) ->Caso não seja a versão desejada clique com o botão direito em cima de "JRE System Libraries". ->Será exibida uma janela com algumas opções de configuração da JRE. ->Check a opção "Alternate JRE" e no combo a frente que listará as opções de JRE selecione "JAVA SE 8".

Espero que ajude.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software