Hibernate buscando hora errada [RESOLVIDO]

Pessoal, bom dia.

Estou desenvolvendo um sistema usando JSF, Hibernate e SQLSERVER 2008.

Tenho uma classe chamada Usuario mapeado para uma tabela de nome cadUsuario. Esta classe tem um atributo de nome dataCriacao que é do tipo Date conforme código abaixo.


import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;


@Entity
@Table(name="CadUsuario")

@NamedQueries({
	@NamedQuery(name = "Usuario.CarregaPorCredenciais", query = "SELECT u FROM Usuario u WHERE u.login = :login AND u.senha = :senha"),	
	@NamedQuery(name = "Usuario.CarregaTodosUsuarios", query = "SELECT u FROM Usuario u"),
	@NamedQuery(name = "Usuario.CarregaPorCodigo", query = "SELECT u FROM Usuario u WHERE u.codUsuario = :codUsuario")
})

public class Usuario {

	//...
	
	@Column(name="DataCriacao", nullable=false)
	private Date dataCriacao;
	
        //...
	
	public Date getDataCriacao() {
		return dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	//...
}

Ao salvar uma data, por exemplo ‘09/11/2013 12:00:00’, tudo funciona bem. Confiro na tabela no SQLSERVER e a data que encontro é ‘09/11/2013 12:00:00’. Porém quando tento buscar esta data no banco, o hibernate me retorna ‘09/11/2013 14:00:00’, ou seja, 2 hrs de diferença. Acredito que seja algum problema de timezone, porém ainda não encontrei como resolver. Alguém teria alguma sugestão?

Desde já agradeço.

Sugiro que você configure seu timezone default:

TimeZone tz = TimeZone.getTimeZone("America/Sao_Paulo"); TimeZone.setDefault(tz);

Trocando, é óbvio, pelo fuso de sua região. E cuidado com o horário de verão…

Roselito, bom dia.

Obrigado pela resposta.

Pesquisando e fazendo mais alguns testes descobri que o problema estava no meu JSF e não no hibernate como eu achava inicialmente.

Consegui resolver da seguinte forma…

em meu WEB.XML inclui o seguinte código:

                <context-param>
		<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
		<param-value>true</param-value>
	</context-param>

em meu XHTML quando vou mostrar alguma data incluo a tag

<f:convertDateTime pattern="dd/MM/yyyy HH:mm:ss" timeZone="#{initParam.timezone}" />

Até +.