JPA - Campo Date

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.

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

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

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;

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.

[quote=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.[/quote]

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

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.