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

Error creating bean with name 'getEntityManagerFactory'

Estou tentando executar o projeto projeto-jpa-2, mas sempre que executo caio nesse erro:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Hibernate: alter table Produto drop foreign key FKbsrs2q7ixb8srg7d0nfys9s5e
set 03, 2018 2:04:33 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
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
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1630)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)

Segue minha classe JpaConfigurator:

package br.com.caelum;

import java.util.Properties;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

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

@Configuration
@EnableTransactionManagement
public class JpaConfigurator {

    @Bean
    public DataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost/projeto_jpa?useTimezone=true&serverTimezone=UTC");
        dataSource.setUsername("root");
        dataSource.setPassword("modfrag");

        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean getEntityManagerFactory(DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();

        entityManagerFactory.setPackagesToScan("br.com.caelum");
        entityManagerFactory.setDataSource(dataSource);

        entityManagerFactory
                .setJpaVendorAdapter(new HibernateJpaVendorAdapter());

        Properties props = new Properties();

        props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "create-drop");

        entityManagerFactory.setJpaProperties(props);
        return entityManagerFactory;
    }

    @Bean
    public JpaTransactionManager getTransactionManager(EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);

        return transactionManager;
    }

}

Meu pom xml:

    <spring.version>4.3.16.RELEASE</spring.version>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.12</version>
      <artifactId>hibernate-ehcache</artifactId>
      <version>5.2.17.Final</version>

O que poderia estar causando esse erro?

7 respostas

Bom, no log ele informa que você está usando um driver desatualizado, eu iria por aí. atualizaria o driver para ver o que pode acontecer :). Sua url de conexão está padrão ou tem algum argumento a mais?

Minha url é a mesma que estou usando em outros cursos, apenas mudando o nome das databases. Mas driver do que desatualizado?

Loading classcom.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

O driver do Mysql.

Modifiquei pra usar o com.mysql.cj.jdbc.Driver, o mysql connector que estou usando é o 8.0.12

Ainda continuo sem solução para esse caso, alguém poderia dar mais uma dica?

Oi Marcos, voltando aqui o tópico. Tem a stack inteira da exception? Apenas com o trecho mostrado aqui ainda não consigo dar uma dica diferente da que não funcionou :(.

solução!

Alberto, consegui resolver o problema, como eu estou usando Windows, apaguei o diretório C:\Users\gsw.m2\repository , depois cliquei com o botão direito no projeto e fiz maven-> update project, no arquivo JpaConfigurator modifiquei a linha:

props.setProperty("hibernate.hbm2ddl.auto", "create-drop");

para:

props.setProperty("hibernate.hbm2ddl.auto", "create");

Não sei se esse essa linha acima teve efeito na solução do problema... mas depois de criar os dados no banco modifiquei a linha para update:

props.setProperty("hibernate.hbm2ddl.auto", "update");

Vou marcar como solucionado! Obrigado pela ajuda!

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