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

Erro de transacao - HTTP Status 500 – Internal Server Error

Ao enviar o formulario da Aula II do curso, é apresentada a seguinte mensagem de erro:

Type Exception Report

Message Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

eu pensei que poderia ser pq diferente da aula, meu banco tem senha. Mas ainda sim, apos alterar e reiniciar o server nao fo.

O que pode ser?

package br.com.casadocodigo.loja.conf;

import java.util.Properties;

import javax.persistence.EntityManagerFactory;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;

// A classe a seguir será a responsável por configurar o framework, passando informações relevantes como o banco a ser utilizado, seu usuário e senha, etc;
@EnableTransactionManagement // Anotação para o Spring gerenciar as transações para nós
public class JPAConfiguration {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {

        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        factoryBean.setJpaVendorAdapter(vendorAdapter);
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        // Passando informações do BD
        dataSource.setUsername("root");
        dataSource.setPassword("mudar123"); // modifique para a senha do seu banco
        dataSource.setUrl("jdbc:mysql://localhost:3306/casadocodigo");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        factoryBean.setDataSource(dataSource);

        Properties props = new Properties();
        // Ver no console algumas questões sendo geradas do hibernate
        props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "update");
        factoryBean.setJpaProperties(props);

        factoryBean.setPackagesToScan("br.com.casadocodigo.loja.models");

        return factoryBean;

    }

    @Bean // a partir desse bean, o Spring fornecerá as transações para o EntityManager
    public JpaTransactionManager transactionManager(EntityManagerFactory emf) {
        return new JpaTransactionManager(emf);
    }

}
10 respostas

Seu código me parece ok.

As informações de conexão com o banco são essas mesmo? senha = mudar123, username = root, db = casadocodigo ?

package br.com.casadocodigo.loja.conf;

import java.util.Properties;

import javax.persistence.EntityManagerFactory;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
public class JPAConfiguration {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {

        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();

        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        factoryBean.setJpaVendorAdapter(vendorAdapter);

        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername("root");
        dataSource.setPassword("");
        dataSource.setUrl("jdbc:mysql://localhost/casadocodigo");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        factoryBean.setDataSource(dataSource);

        Properties properties = new Properties();
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        properties.setProperty("hibernate.show_sql", "true");
        properties.setProperty("hibernate.hbm2ddl.auto", "update");

        factoryBean.setJpaProperties(properties);
        factoryBean.setPackagesToScan("br.com.casadocodigo.loja.models");

        return factoryBean;
    }

    @Bean
    public JpaTransactionManager transactionManager(EntityManagerFactory emf) {
        return new JpaTransactionManager(emf);
    }


}

Sim, eram essas mesmo. Eu até desinstalei o mysql. Sei la se é bug. Vou tentar instalar novamente e eu digo aqui para me ajudar.

Gente eu quero dar continuidade no curso, ninguem para me ajudar? Olha eu logando no mysql:

(PELO CMD)

C:\Users\ACER>mysql -h localhost -u root -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.15 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

ps: ALTEREI A SENHA PARA root, E JA INFORMEI NO JPACONFIGURATION.

ALGUEM POR FAVOR ME AJUDA, QUERO DAR CONTINUIDADE NO MEUS ESTUDOS.

Message Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection

erro que ta dando.

é apenas ao enviar o formulario.

Possivel motivo:

GRAVE: Servlet.service() for servlet [dispatcher] in context with path [/casadocodigo] threw exception [Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection] with root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client

Alguem sabe o que pode ser?

solução!

Fala André,

Seguinte, o erro que você está tendo é porque você está tentando conectar num banco de dados MySQL 8 usando um driver JDBC do MySQL 5.

Você tem duas opções: 1) Instala o MySQL 5 e usa o driver atual 2) Utiliza a versão mais atual do driver e atualiza o hibernate.dialect.

Aqui tem o link do driver do MySQL 8 para você fazer o download: https://dev.mysql.com/downloads/connector/j/

e troque o

properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");

por

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

Abraço e bons estudos!

Otávio, quando eu coloquei a dependencia do MySql connector com o mysql 7

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

e tbm mudei a dialect que vc me disse, mas agora apresenta erro e nao consigo nem starta o servidor para teste (N abre nem o localhost)

to pensando em baixar o mysql 5 para ver se funciona kkk

erro:

mar 07, 2019 10:05:53 PM org.apache.catalina.core.StandardContext loadOnStartup
GRAVE: Servlet [dispatcher] in web application [/casadocodigo] threw load() exception
org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.dialect.MySQL8Dialect] as strategy [org.hibernate.dialect.Dialect]

Sobe a versão da dependência do Hibernate pra pelo menos a 5.3.1.Final também

Otavio, eu achei mais facil voltar pro mysql 5.7.25

E depois de 60 minutos e um dia de estudo "perdido" (diria de aprendizado haha) e com a suas dicas eu consegui fazer funcionar.

MUITO obrigado meu amigo.

Que bom que deu certo

Abraço e bons estudos amigo! =)