Persistir LocalDate

2 respostas
daviddjp

Iae galera…

Trabalho com Wicket, Spring e Hibernate.

O problema é que nos campos de data ( java.util.Date ) quando o usuário digita uma data do tipo 10/13/2009 ( inválida por conta do mês ) a data chega na web page ( ou bean ou action ) “consertada”, ou seja, ela chega 10/01/2010.

Fizemos o seguinte, mudamos os campos para LocalDate ( Joda Time ) e criamos um LocalDateConverter.

O problema do “consertamento” da data foi resolvido.

Só que nao dá para persistir esse campo.

Um exemplo de stacktrace que obtive na hora de consultar essa tabela:

com.ibm.db2.jcc.a.SqlException: [jcc][1083][10406][3.52.95] Conversão ilegal: não é possível converter de "byte[]" para "java.sql.Date" ERRORCODE=-4474, SQLSTATE=null at com.ibm.db2.jcc.a.ad.a(ad.java:650) at com.ibm.db2.jcc.a.ad.a(ad.java:60) at com.ibm.db2.jcc.a.ad.a(ad.java:94) at com.ibm.db2.jcc.a.ec.a(ec.java:677) at com.ibm.db2.jcc.a.ec.a(ec.java:1093) at com.ibm.db2.jcc.a.ec.a(ec.java:1061) at com.ibm.db2.jcc.a.sl.a(sl.java:1724) at com.ibm.db2.jcc.a.sl.nc(sl.java:4204) at com.ibm.db2.jcc.a.sl.e(sl.java:2993) at com.ibm.db2.jcc.a.sl.e(sl.java:3393) at com.ibm.db2.jcc.a.sl.Ob(sl.java:569) at com.ibm.db2.jcc.a.sl.executeQuery(sl.java:543) at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186) at org.hibernate.loader.Loader.getResultSet(Loader.java:1787) at org.hibernate.loader.Loader.doQuery(Loader.java:674) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) at org.hibernate.loader.Loader.doList(Loader.java:2213) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) at org.hibernate.loader.Loader.list(Loader.java:2099) at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569) at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)

Algum tem alguma solução ou para a data parar de ser transformada ou para persistir LocalDate ( com preferência para solução para persistir LocalDate)

Obrigado

2 Respostas

nbluis

Nunca usei o Joda por isso não sei se tem uma solução la pra isso.

Mas vejo duas maneiras de fazer isso.
Mais Simples: Utilize o Date para persistir e utilize o LocalDate apenas como auxiliar transient. que converte no set e get para a sua Date persistente. (Eu não disse que era bonito).

Mais Chata: O hibernate tem suporte para UserTypes. Voce pode implementar um para o seu tipo customizado.

daviddjp

Aqui onde trabalho criaram uma session factory para substituir a padrão do Spring que a gente usa aqui.

Disseram que essa session factory customizada resolve o problema e persiste LocalDate. Ainda estou fazendo as mudanças no projeto para testa=la. Se funcionar vou tentar abrir e descobrir o que ela tem de diferente para fazer isso funcionar.

Conseguindo eu posto aqui a resposta.

Abracos

Criado 7 de janeiro de 2010
Ultima resposta 8 de jan. de 2010
Respostas 2
Participantes 2