Olá Pessoal, tudo bom?
Hoje iremos falar sobre um erro de Mapeamento de Entidades JPA, mais especificamente da exception org.hibernate.HibernateException: Missing table: NomeTabela
Descrição do Erro
Esse é um erro muito comum de acontecer ao trabalhar com o mapeamento das tabelas de um banco de dados. O JPA por default usa o nome da classe para verificar se há uma tabela no banco de dados com o mesmo nome. Caso os nomes da classe e tabela sejam iguais, independente das letras serem minúsculas ou maiúsculas, não ocorrerá erro; mas caso sejam diferentes e não for utilizado a annotation javax.persistence.@Table, ocorrerá a exception descrita acima.
Para o caso acima ocorrerá um erro com uma stack trace parecida:
org.hibernate.HibernateException: Missing table: NomeTabela
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1302)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:512)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1797)
at br.com.mauda.seminariosCientificos.dao.util.HibernateUtil.getSessionFactory(HibernateUtil.java:23)
… 35 more
Solução 1
O primeiro ponto a ser verificado é se a tabela que você deseja mapear EXISTE no banco de dados. Se não haver uma tabela com o mesmo nome da classe, por exemplo, ARTISTA, o hibernate dará esse erro. Então a primeira solução é criar uma tabela com o mesmo nome da classe. Se caso não for possível criar uma tabela, ou ela existe com outro nome, favor ver a solução 2.
Solução 2
A solução para este erro é inserir a annotation javax.persistence.@Table sobre o nome da classe. Essa annotation deve estar com o atributo name preenchido com o nome da tabela do banco de dados, como mostra o código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package br.com.mauda.example.model; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="TB_ARTISTA") public class Artista implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY) private Long id; private String nome; //outros atributos, métodos e construtores } |
finally{
Caso você achou mais alguma solução para essa exception, por favor deixe nos comentários abaixo!
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply