1
resposta

Erro ao importar projeto

Olá. Estou tentando importar o projeto e preparar o ambiente para começar o curso, mas surgem diversos erros. O log inicial é o seguinte:

WARN org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getEntityManagerFactory' defined in class path resource [br/com/caelum/JpaConfigurator.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution
[main] ERROR org.springframework.web.context.ContextLoader - Context initialization failed

O que fazer para subir o projeto?

1 resposta

Olá Rodrigo, tudo bem com você?

Subindo um docker com a versão do mysql8eu consegui reproduzir os mesmos erros que você, e de algumas formas consegui solucionar:

Vamos por algumas alternativas por nivel de recomendação:

Atualizar os drivers para o mysql8

Para isso no pom.xml faça a seguinte atualização:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>

E dentro de JPAConfigurator.java modifique o dialeto:

        props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");

Não esqueça de criar o banco de dados como projeto_jpa e verificar a URL

dataSource.setUrl("jdbc:mysql://localhost:3306/projeto_jpa");

Acredito que dessa maneira já irá funcionar corretamente, eu fiz os testes e não tive nenhum problema :)

Uma outra alternativa, mas menos recomendada, seria criar a senha do modo tradicional no mysql

  1. Conectar no Banco de Dados

  2. Utilizar o comando

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'novaSenha';

FLUSH PRIVILEGES;

Por padrão a senha com o Mysql8 passa por uma criptografia, dessa forma, estamos criando um nova de uma maneira crua, dado que é um banco local não há muitos problemas, e dessa maneira o Spring ira conseguir se conectar com o dialeto do mysql5 :)

Uma outra coisa que eu recomendaria, seria ir fazendo os cursos de Springboot, pois esse curso de JPA está sendo refeito no momento, e as vezes você pode querer esperar logo a nova versão :)

O conteúdo apresentado no curso de JPA parte I é suficiente para conseguir fazer tranquilamente :)

Caso pretenda continuar fazendo esse curso, na terça feira um aluno notou um problema que está acontecendo recentemente, que pode acontecer ao clicar no botão de Editar dos produtos

No caso, é lançar um erro da jsp não encontrar o mapeamento, neste caso é só seguir os seguintes passos:

Em ProdutoController.java

Vamos mudar a assinatura do @RequestMapping do método salvar para:

    @RequestMapping(value="/cadastrar", method=RequestMethod.POST, name="buscarProdutos")
    public String salvar(@ModelAttribute @Valid Produto produto, BindingResult result, RedirectAttributes atts) {

E em form.jsp

Vamos trocar a tag <form pela seguinte:

<form class="form-group" method="post" action="<c:url value="/produto/cadastrar"/>">    

Abraços e Bons Estudos!

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