• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

Erros JPA – org.hibernate.HibernateException: Missing table: NomeTabela

March 13, 2017 by Mauda Leave a Comment

Conteúdo do Post:
  1. Descrição do Erro
  2. Solução 1
  3. Solução 2
  4. finally{

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:

Java
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!

Filed Under: Erros, Hibernate, Java, JPA Tagged With: Entidades, Erros, Exceptions, Hibernate, Java, JPA, Mapeamento

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2025 · Genesis Framework · WordPress · Log in