• 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 column: NomeColuna in NomeTabela

March 20, 2017 by Mauda Leave a Comment

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

Olá Pessoal, tudo bom?

Hoje iremos falar sobre um erro de Mapeamento de Entidades JPA, mais especificamente da exception org.hibernate.HibernateException: Missing column: NomeColuna in NomeTabela

Descrição do Erro

Esse é um erro muito comum de acontecer ao trabalhar com o mapeamento das colunas de uma tabela do banco de dados. O JPA por default usa o nome do atributo para verificar se há uma coluna no banco de dados com o mesmo nome. Caso os nomes do atributo e coluna 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.@Column ou a javax.persistence.@JoinColumn se caso for uma associação @OneToOne ou @ManyToOne ocorrerá a exception descrita acima.

Para o caso acima ocorrerá um erro com uma stack trace parecida:

org.hibernate.HibernateException: Missing column: NomeColuna in 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 coluna que você deseja mapear EXISTE no banco de dados. Se não haver uma coluna com o mesmo nome da classe, por exemplo, NOME, o hibernate dará esse erro. Então a primeira solução é criar uma coluna com o mesmo nome do atributo. Se caso não for possível criar uma coluna, ou ela existe com outro nome, favor ver a solução 2.

Solução 2

A solução para este erro, quando for um atributo simples, é inserir a annotation javax.persistence.@Column sobre o atributo. Essa annotation deve estar com o atributo name preenchido com o nome da coluna 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
24
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;
 
@Column(name="TX_NOME")
private String nome;
//outros atributos, métodos e construtores
}

Solução 3

Outra solução para este erro, quando for uma associação @OneToOne ou @ManyToOne é inserir a annotation javax.persistence.@JoinColumn sobre o atributo. Essa annotation deve estar com o atributo name preenchido com o nome da coluna do banco de dados que indica a Chave Estrangeira da tabela, 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
24
25
package br.com.mauda.example.model;
 
import java.io.Serializable;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
 
@Entity
public class Musica implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
@ManyToOne
@JoinColumn(name="ID_ARTISTA")
private Artista artista;
 
//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