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

No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined

Ao executar meu projeto o seguinte erro esta sendo apresentado:

Obs: Já coloquei o @Tansaction citado em outro fórum, mas não resolveu.

Erro:

fev 19, 2019 12:11:45 AM org.apache.catalina.core.StandardContext loadOnStartup GRAVE: Servlet [dispatcher] in web application [/casadocodigo] threw load() exception org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined

Fontes:

ProdutoDAO

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;

import br.com.casadocodigo.loja.models.Produto;

@Repository
public class ProdutoDAO {

    @PersistenceContext
    private EntityManager manager;

    public void gravar(Produto produto) {
        manager.persist(produto);
        System.out.println(produto);
    }

}

Produto

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Produto {

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String titulo;
    private String descricao;
    private int paginas;

    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public int getPaginas() {
        return paginas;
    }
    public void setPaginas(int paginas) {
        this.paginas = paginas;
    }

    @Override
    public String toString() {
        return "Produto [titulo=" + titulo + ", descricao=" + descricao + ", paginas=" + paginas + "]";
    }

}

JPAConfiguration

import java.util.Properties;

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

public class JPAConfiguration {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();

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

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

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

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

        return factoryBean; 
    }

}
2 respostas

Olá Fabio, bom dia!

Você adicionou seu DAO na anotação @ComponentScan, na classe AppWebConfiguration? Assim:

@EnableWebMvc
@ComponentScan(basePackageClasses={HomeController.class, ProdutoDAO.class})
public class AppWebConfiguration {

    // restante do código omitido
}

E confira se adicionou a classe JPAConfiguration no método getServletConfigClasses() da classe ServletSpringMVC para que o Spring econtre sua classe de configuração:

@Override
protected Class<?>[] getServletConfigClasses() {
    return new Class[] { AppWebConfiguration.class, JPAConfiguration.class};
}

O passo a passo você encontra nessa aula.

Veja se algum desses casos que citei resolve o problema, senão volte a postar aqui.

solução!

Obrigado Thais, problema resolvido.

A instrução abaixo resolveu o problema, porém na aula "Preparando Spring com JPA" não encontrei esta instrução.

@Override
protected Class<?>[] getServletConfigClasses() {
    return new Class[] { AppWebConfiguration.class, JPAConfiguration.class};
}

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