Hibernate não diz a classe com erro: Wrong column type

12 respostas
F

Estou rodando o sistema com o validate do hibernate.
Ele acha um erro, mas não diz onde.
Tem muitas entidades e todas elas tem algumas datas. E ai complica de saber onde ta o problema.

Tem como mandar o hibernate mostrar em qual tabela/entidade que ele pegou o erro ?

Caused by: org.hibernate.HibernateException: Wrong column type: DT_ALTER, expected: timestamp

at org.hibernate.mapping.Table.validateColumns(Table.java:261)

at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1083)

at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:116)

at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:317)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)

at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)

Já busquei por DT_ALTER e em todas tem a anotação com timestamp

12 Respostas

tmvolpato

como vc esta fazendo?

cole o código de um deles ai

F

Eu estava rodando pelo servidor e ai ele não tava mostrando muita coisa.
Criei uma classe Main só pra fazer esse validate e ai ela passou a especificar mais e descobri onde era.

Está assim:

@Temporal(TemporalType.TIMESTAMP)

@Column(name = DT_ALTER, length = 7)

private Date dtAlter;

Esse length o hibernate q mapeou com base no banco.
Fui ver e no o campo está como Date e não timestamp.

Agora já não sei oq faço pq tem muitas Datas e todas estão como Date no banco.
Na aplicação está tudo com @Temporal(TemporalType.TIMESTAMP)

Acho q vou parar de usar o validate do hibernate pra não pegar isso.

:cry:

tmvolpato

fdiaz2011:
Eu estava rodando pelo servidor e ai ele não tava mostrando muita coisa.
Criei uma classe Main só pra fazer esse validate e ai ela passou a especificar mais e descobri onde era.

Está assim:

@Temporal(TemporalType.TIMESTAMP)

@Column(name = DT_ALTER, length = 7)

private Date dtAlter;

Esse length o hibernate q mapeou com base no banco.
Fui ver e no o campo está como Date e não timestamp.

Agora já não sei oq faço pq tem muitas Datas e todas estão como Date no banco.
Na aplicação está tudo com @Temporal(TemporalType.TIMESTAMP)

o import de Date qual é passa ai?
tira esse length
depois na parte da view você vai por
o pattern que quiser

Acho q vou parar de usar o validate do hibernate pra não pegar isso.

:cry:

F

O import é esse:
import java.util.Date;

tmvolpato

fdiaz2011:
O import é esse:
import java.util.Date;

só tirar length que resolve

F

Resolve não.

A data no banco está Date e na aplicação está

@Temporal(TemporalType.TIMESTAMP)

@Column(name = DT_ALTER)

private Date dtAlter;

O validate do hibernate reclama disso.
Quando troco pra @Temporal(TemporalType.DATE), ele não reclama.

Pelo q vi eu tenho q colocar na entidade o TemporalType.DATE e perder a hora, ou não usar o validate do hibernate pra ele não reclamar e me deixar trabalhar.
hehe

Outra opção seria mudar no banco, mas esse pessoal q trabalha com banco é muito inflexivel e qro evitar falar com eles.

tmvolpato

fdiaz2011:
Resolve não.

A data no banco está Date e na aplicação está

@Temporal(TemporalType.TIMESTAMP)

@Column(name = DT_ALTER)

private Date dtAlter;

O validate do hibernate reclama disso.
Quando troco pra @Temporal(TemporalType.DATE), ele não reclama.

Pelo q vi eu tenho q colocar na entidade o TemporalType.DATE e perder a hora, ou não usar o validate do hibernate pra ele não reclamar e me deixar trabalhar.
hehe

Outra opção seria mudar no banco, mas esse pessoal q trabalha com banco é muito inflexivel e qro evitar falar com eles.

Acho que sei qual é o problema vou confirmar e já te digo

tmvolpato

que banco que vc esta usando?

teste isso é para resolver
coloque debaixo da @Temporal

F
@Temporal(TemporalType.TIMESTAMP)

@org.hibernate.annotations.Generated(value=GenerationTime.INSERT)

@Column(name = DT_ALTER)

private Date dtAlter;
Exception in thread main java.lang.ExceptionInInitializerError

at java.lang.J9VMInternals.initialize(J9VMInternals.java:218)

at java.lang.J9VMInternals.initialize(J9VMInternals.java:161)

at Projeto.main(Projeto.java:7)

Caused by: org.hibernate.HibernateException: Wrong column type: DT_ALTER, expected: timestamp

at org.hibernate.mapping.Table.validateColumns(Table.java:261)

at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1083)

at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:116)

at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:317)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)

at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)

:cry: :cry:

tmvolpato

qual é o seu banco?

F

Desculpa, esqueci de falar.
É o Oracle 10g

tmvolpato

fdiaz2011:
Desculpa, esqueci de falar.
É o Oracle 10g

entao sendo oracle não precisa daquilo que te passe
deixa como estava antes

o que pode esta acontecendo é o seguinte
a tabela já foi criada como date

delete da tabela e manda criar novamente

Criado 25 de abril de 2013
Ultima resposta 25 de abr. de 2013
Respostas 12
Participantes 2