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

eliangela

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

gilmarcand

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

rod

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.

jonathanprogrammer

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

gilmarcand

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