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

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: Unknown entity: br.com.casadocodigo.loja.models.Produto

Olá pessoal, tudo bem ?

Estou com o erro que coloquei como título e não consigo resolver, alguém pode ajudar ? Obrigado.

package br.com.casadocodigo.loja.models;

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 + "]";
    }

}
7 respostas

Pelo visto ele não está reconhecendo sua entidade produto, verifique se o nome está correto, se esta no pacote em que você mapeou, se essa tabela existe no seu bd.

Olá Diego,

A idéia é o hibernate criar a entidade no banco e deu esse erro... não entendi o por que ele não gerou a tabela.

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 entityManagerFactoryBean(){
        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();

        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

        factoryBean.setJpaVendorAdapter(vendorAdapter);

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

        factoryBean.setDataSource(dataSource);

        Properties props = new Properties();
        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.cadadocodigo.loja.models");

        return factoryBean;
    }

    @Bean
    public JpaTransactionManager transactionManage(EntityManagerFactory emf){
        return new JpaTransactionManager(emf);
    }
}
package br.com.casadocodigo.loja.conf;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer {

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

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

}

coloque esse trecho na classe jpaConfiguration para ver se resolve

dataSource.setDriverClassName("com.mysql.jdbc.Driver");

Já consta adicionado na JPAConfiguration essa mesma linha que indicou.

exclui a tabela do bd e executa de novo o codigo, e veja se a base que esta usando como principal é a mesma que colocou na jpaconf

solução!

Diego resolvi o problema !

O problema estava em um erro de digitação no comando :

factoryBean.setPackagesToScan("br.com.cadadocodigo.loja.models");
Ao invés de :
factoryBean.setPackagesToScan("br.com.casadocodigo.loja.models");

Obrigado pela atenção

:)