3
respostas

Erro ao popular o banco MySQL - Unable to build EntityManagerFactory

Importei o projeto de exemplo no Eclipse. A única configuração que alterei no persistence.xml foi a senha do root. Antes criei o banco de dados livrariadb. Ao rodar o arquivo PopulaBanco.java recebo a seguinte crítica de erro no console:

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: livraria] Unable to build EntityManagerFactory
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
    at br.com.caelum.livraria.dao.PopulaBanco.main(PopulaBanco.java:20)
Caused by: org.hibernate.HibernateException: Error applying BeanValidation relational constraints
    at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:219)
    at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:126)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:303)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
    ... 5 more
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:208)
    ... 10 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:398)
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2248)
    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:521)
    at org.hibernate.cfg.beanvalidation.TypeSafeActivator.applyDDL(TypeSafeActivator.java:119)
    ... 15 more
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

Não consigo descobrir onde está o problema.

3 respostas

Bom dia,

estava com o mesmo problema, nao consegui identificar, creio que é a compatibilidade da versao do seu eclipse e Mysql com as bibliotecas que estao no projeto que voce importou.... o primeiro teste funcionou ? antes de importar o projeto ?, o meu funcionou, entao eu copiei apenas as classes do projeto que é para importar e os arquivos .xhtml (autor, livro), sendo assim ela funcionou....

um dos problemas identificados foram esses :

https://cursos.alura.com.br/forum/topico-curso-java-e-jsf-i-sua-aplicacao-web-com-jsf2-erro-ao-tentar-gravar-autor-resolvido-83632

e o outro na aula 4, mas ainda nao descobri:

https://cursos.alura.com.br/forum/topico-aula-4-completando-o-sistema-e-lidando-com-escopos-do-jsf-2-83635

Oi Marcelo,

A partir do Java 9 entrou um novo sistema do módulos no mundo Java. A principio uma boa ideia, no entanto nem todos os módulos são carregados por padrão.

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), você recebeu o erro NoClassDefFoundError.

A noticia boa é que você pode pedir para a JVM que ela carregue esse modulo e tudo volte a funcionar.

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

Ou se preferir, muda para o JDK 8

Otávio, boa noite! Acessei o link, mas não consegui entender como configuro o comando para o JVM carregar o módulo do JaxB. Onde devo acrescentar esta configuração: --add-modules java.xml.bind ? Em algum arquivo? eclipse.ini? Via linha de comando? Adicionando uma variável de ambiente do sistema?

Consegue me explicar melhor os procedimentos previstos no link que indicou?