• 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: Wrong column type in TABLE for column COLUMN. Found: date, expected: timestamp

February 6, 2017 by Mauda Leave a Comment

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

Olá Pessoal, tudo bom?

Hoje iremos falar sobre mais um erro de Mapeamento de Entidades JPA, mais especificamente da exception Wrong column type in TABLE for column COLUMN.  Found: date, expected: timestamp.

Descrição do Erro

Ao mapear colunas que armazenam Data e Hora cria-se um atributo do tipo java.util.Date e a partir deste mapeamos para a coluna correspondente se o nome do atributo não for igual a coluna da tabela com a annotation @javax.persistence.Column, como no exemplo 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
26
27
28
package br.com.mauda.example.model;
 
import java.io.Serializable;
import java.util.Date;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
 
@Entity
public class Artista implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
private Long id;
private String nome;
@Column(name="DT_ANIVERSARIO")
private Date dataAniversario;
public Artista(){
}
//outros atributos, métodos e construtores
}

Como não utilizamos @javax.persistence.Temporal e com isso não definimos qual será o formato da Data no banco de dados, irá causar o seguinte erro apresentando pela stack trace:

org.hibernate.HibernateException: Wrong column type in PUBLIC.PUBLIC.TB_SEMINARIO for column data. Found: date, expected: timestamp
at org.hibernate.mapping.Table.validateColumns(Table.java:373)
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1305)
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)
at br.com.mauda.seminariosCientificos.dao.util.HibernateUtil.getSession(HibernateUtil.java:29)
… 35 more

Solução

Como já descrito acima, a solução para este erro é inserir a annotation javax.persistence.Temporal, com a javax.persistence.TemporalType setada. Mas nesse momento qual devemos escolher para inserir aqui. Você deverá visualizar o script da tabela do banco de dados para isso, ou ver as definições da coluna em algum database manager. No caso de uma data de aniversário não faz muito sentido termos um armazenamento das horas, minutos e segundos. Veja na tabela abaixo o comparativo entre os tipos de datas:

 

Tipo da Coluna Descrição
Date A coluna apenas irá armazenar data (dia, mes e ano)
Time A coluna apenas irá armazenar tempo (hora, minuto, segundo e milissegundo)
Timestamp A coluna irá armazenar data (dia, mes e ano) e tempo (hora, minuto, segundo e milissegundo)

No nosso caso utilizaremos Date, conforme 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
26
27
28
29
30
31
package br.com.mauda.example.model;
 
import java.io.Serializable;
import java.util.Date;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
 
@Entity
public class Artista implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
private Long id;
private String nome;
@Temporal(TemporalType.DATE)
@Column(name="DT_ANIVERSARIO")
private Date dataAniversario;
public 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: Date, Entidades, Erros, Exceptions, Hibernate, Java, JPA, Mapeamento, Temporal, TemporalType, Time, Timestamp

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