JPA - Campo Date

6 respostas
R

Bom dia Pessoal,

Tenho um pojo, no qual é um campo no BD como Date, o banco de dados é o DB2,
e esta anotado da seguinte forma:

@Column(name=“dt_emisdocto”)
public String dt_emisdocto;//data de emissao do rg

Quando vou inserir o objeto no BD, utilizando JPA - Hibernate

EntityManager em = conexao.getEntityManager();

em.getTransaction().begin();

em.persist(objeto);

em.getTransaction().commit();

O que acontece é que, eu obtenho a conexao, abro a transacao, persisto, mas quando vou comitar a transacao, da o seguinte erro:

SEVERE: Could not synchronize database state with session

org.hibernate.exception.SQLGrammarException: Could not execute JDBC

batch update hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)

at

org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)

at

org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)

O campo no Bd é um Date, e pode ser gravado no seguinte formato: dd/MM/yyyy.

6 Respostas

E

Aí que está o erro.
se o campo no banco é Date, vc tem que usar na sua classe as classes Calendar ou Date (pacotes java.util).

ex.:

@Column(name="dt_emisdocto") public Calendar dt_emisdocto;//data de emissao do rg

Espero ter ajudado
Até mais

G

Por que na classe você pôs este atributo como String? Não deveria ser Date ou Calendar?

R

Voce precisa utilizar a annotation @Temporal para informar que seu atributo ira conter valor de Data, na especificacao consta que esse atributo deve ser ou Date ou Calendar.

Um exemplo de uso:

@Temporal(TemporalType.DATE) private java.util.Date myDate;

R

Optei por escrever o campo como String, pois a aplicação desenvolvida é Swing, entao utilizo um calendario, mas quando mudo o pojo para Date, ele traz a data em um formato assim:
Dec Monday 13 00:00:00 2009
Mas quando utilizo o pojo como String
ele ja traz a data no formato
dd/MM/yyyy
Entao para utilizar o pojo como Date ou Calendar, teria que mudar a API do Calendario, mas essa API esta muito Complexa.
Utilizando o BD Mysql 5, funciona normalmente, porem quando mudo para o BD DB2, da esse problema.

J

romulo.neves:
Optei por escrever o campo como String, pois a aplicação desenvolvida é Swing, entao utilizo um calendario, mas quando mudo o pojo para Date, ele traz a data em um formato assim:
Dec Monday 13 00:00:00 2009
Mas quando utilizo o pojo como String
ele ja traz a data no formato
dd/MM/yyyy
Entao para utilizar o pojo como Date ou Calendar, teria que mudar a API do Calendario, mas essa API esta muito Complexa.
Utilizando o BD Mysql 5, funciona normalmente, porem quando mudo para o BD DB2, da esse problema.

Faz uma conversão desta tua String pra date!

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date data = format.parse(tuaVariavelString);

Deste jeito tu continua com teu calendar…

E consegue passar tua informação pra data!!

G

Sinceramente eu nunca esbarrei com esta necessidade, então não posso te dar uma resposta precisa, mas tenta colocar assim:

@Column(name="dt_emisdocto", columnDefinition = "date")
@Temporal(TemporalType.DATE) 
public String dt_emisdocto;//data de emissao do rg

Como te disse, é algo que nunca esbarrei nem li algo na documentação que me dê certeza que vai funcionar, é somente teste.

Criado 4 de dezembro de 2009
Ultima resposta 4 de dez. de 2009
Respostas 6
Participantes 5