Neste sentido fiz a implementação com Joda Time com a versão: joda-time-2.0 e joda-time-hibernate-1.2
Estou usando a classe “org.joda.time.LocalTime” com o @Type(type = “org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime”)
para trabalhar com campos do tipo TIME (HORA)
Porém percebi que o valor exibido na tela é diferente do valor do banco de dados.
ou seja,
no banco de dados o campo do tipo TIME, a hora está armazenada com o valor 07:00h e o JodaTime mostra na tela 10:00h, ocorre uma variação de -3 horas
inclusive, debugando o JodaTime mostra o valor 10:00h e no banco está 07:00h
Conferi o timezone, e está correto.
Alguém poderia dar alguma sugestão de como poderia fazer para o JodaTime mostrar exatamente o valor que está armazenado no banco de dados?
Será alguma configuração do vRaptor?
Att,
Marcelo Yukio Outa
Analista de Sistemas // Programador Java Web
Lucas, obrigado pelo feedback.
Desculpe a demora pela resposta…
Fiquei encarregado de outro projeto e logo sai de férias… Agora que voltei a trabalhar com este assunto…
Mãos a obra:
Não é no banco nem na aplicação: Verifiquei o banco de dados, inclusive testei no postgresql, oracle, mysql e todos apresentam a mesma situação…
Realmente não tem nada a ver com o vRaptor… rsrs
Pelo que pesquisei… no JODATIME há duas possibilidades para se trabalhar com o tipo TIME (horas): @Type(type = “org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime”) @Type(type = “org.joda.time.contrib.hibernate.PersistentLocalTimeAsString”)
… com PersistentLocalTimeAsTime temos o problema da variação do UTC/GMT time, que dependendo do lugar onde se está no mundo, o jodatime faz o desconto/adição dessa diferença de horas >>> BUG DO JODATIME <<<.
… com PersistentLocalTimeAsString temos o problema ao gravar o registro no banco, pois no banco o campo é do tipo time without time zone… nesse caso o framework não consegue realizar o CAST do valor “PersistentLocalTimeAsString” para o tipo correto.
SOLUÇÃO!!! :idea:
Basta adicionar ao classpath a lib da Jadira Usertype (http://usertype.sourceforge.net/http://blog.jadira.co.uk/ )
e usar: @Type(type = “org.jadira.usertype.dateandtime.joda.PersistentLocalTime”) no seu campo persistente…
Espero que ajude outras pessoas que possuam algum problema parecido.