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

Não consigo cadastrar o produto

Na    3° aula do curso de spring mvc 1 o professor ensina a cadastrar produtos,
mas quando eu aperto o botão de cadastrar, aparece essa Exception:
SEVERE: 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

Dando uma olhada em outras questões aqui no fórum, achei esse mesmo problema, ai eu mudei a versão do meu mysql-connector-java e passou a
dar um outro erro:
SEVERE: 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.GenericJDBCException: Could not open connection] with root cause
com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Hora oficial do Brasil' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

Como pode ver, a primeira linha do erro não mudou, mas a segundo ficou diferente.

A minha JpaConfiguration esta assim:

*imports

@EnableTransactionManagement
public class JpaConfiguration {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {

        LocalContainerEntityManagerFactoryBean factoryBean =
        new LocalContainerEntityManagerFactoryBean();
        JpaVendorAdapter jva = new HibernateJpaVendorAdapter();
        factoryBean.setJpaVendorAdapter(jva);

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

        Properties p = new Properties();
        p.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        p.setProperty("hibernate.show_sql", "true");
        p.setProperty("hibernate.hbm2ddl.auto", "create"); 
        factoryBean.setJpaProperties(p);

        factoryBean.setPackagesToScan("homecode.CasadoCodigo.models");

        return factoryBean;
    }

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

E eu não faço ideia do porquê do erro de time zone, no console aparece
as horas como se estivesse no horário de verão, mas meu pc
esta no horário normal
2 respostas

Oi amigo, tudo bem?

Tenta utilizar o MySQL 5, deve resolver esse problema de conexão com o banco de dados.

E para o timezone, tenta usar a string de conexão abaixo:

"jdbc:mysql://localhost:3306/homecode?useTimezone=true&serverTimezone=UTC"
solução!
 Oi Otávio, eu fiz as alterações que você sugeriu e também 
tentei alterar as versões das minhas dependências para as
mais atuais, mas logo voltei atras, pois tive mais erros.
 Contudo, o erro ainda persiste, e diferente de antes,
que só dava erro na hora de cadastrar um produto,
o erro agora acontece logo quando rodo o servidor.

Essa é a mensagem que recebo:

SEVERE: Servlet.init() for servlet [SpringDispatcher] threw exception
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productsController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private homecode.CasadoCodigo.daos.DAOProduct homecode.CasadoCodigo.controller.ProductsController.daop; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'DAOProduct': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] 
...
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private homecode.CasadoCodigo.daos.DAOProduct homecode.CasadoCodigo.controller.ProductsController.daop; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'DAOProduct': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory]
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'DAOProduct': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory]
...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory]
...
SEVERE: Servlet [SpringDispatcher] in web application [/CasadoCodigo] threw load() exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory]

Porém, embora todos esses erros, teve uma mudança no banco de dados:

Hibernate: alter table Product_preços drop foreign key FK_2ytx0bjix3jc13fywme06sujd
Hibernate: drop table if exists Product
Hibernate: drop table if exists Product_preços
Hibernate: create table Product (id integer not null auto_increment, desc varchar(255), paginas integer, titulo varchar(255), primary key (id))
Hibernate: create table Product_preços (Product_id integer not null, tipo integer, valor decimal(19,2))
Hibernate: alter table Product_preços add constraint FK_2ytx0bjix3jc13fywme06sujd foreign key (Product_id) references Product (id)

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