Hibernate, Oracle, data

Pessoal, estou com um problema assim:

Eu crio uma instancia de GregorianCalendar e seto os valores de dia, mes, ano, hora, minuto e segundo. Seto sempre hora meio dia porque tive problemas com o horário de verão.

GregorianCalendar calendar = new GregorianCalendar();
calendar.set(GregorianCalendar.YEAR, ano);
calendar.set(GregorianCalendar.HOUR, 12);
calendar.set(GregorianCalendar.MINUTE, 0);
calendar.set(GregorianCalendar.SECOND, 0);
calendar.set(GregorianCalendar.MONTH, mes);	
calendar.set(GregorianCalendar.DAY_OF_MONTH, dia);

Depois eu tenho uma classe que é o mapeamento de uma tabela do banco. Ela tem um método para setar uma data, nele eu passo o objeto que criei anteriormente. No banco esse campo é um timestamp(6).

Fica assim:

Session hSession = sf.openSession();
Transaction tx = hSession.beginTransaction();

MinhaTabela t = new MinhaTabela ();
t.setDtTrabalho(calendar.getTime());
//seta outros campos...

hSession.saveOrUpdate(t);

tx.commit();
hSession.close();

Depois eu olho no banco e vejo que todos os objetos foram inseridos, mas, eles não estão com a hora que eu queria que eles estivessem. Depois, quando tento carregar esses dados e crio um objeto date a hora vem bangunçada e, dependendo do dia, ele acrescenta um dia (por conta do horário de verão).

Alguém sabe porque esses dados não vão para o Oracle com hora meio dia??

Obrigada.

Ola!

Até onde sei, o único horário de verão que vive bagunçado é o brasileiro. Já tive problemas onde foi necessário recompilar a JVM com o horário de verão ajustado.
De qualquer forma, certifique-se que seu Locale padrão está para o Brasil (inclua a linha abaixo num bloco static):

Locale.setDefault(new Locale("pt", "BR"));

Dê uma olhada neste link também: http://chester.blog.br/archives/2006/10/acertando_o_hor.html
Só para garantir: quando você depura o código, sua variável “dia” está correta, né?!

alevi,

o dia está indo certinho sim.

GregorianCalendar calendar = new GregorianCalendar();
calendar.set(GregorianCalendar.HOUR, 12);
calendar.set(GregorianCalendar.MINUTE, 0);
calendar.set(GregorianCalendar.SECOND, 0);
calendar.set(GregorianCalendar.YEAR, ano);
				
for(int mes = 0; mes <= 11; mes++){
	calendar.set(GregorianCalendar.MONTH, mes);	
	for(int dia = 1; dia <= calendar.getActualMaximum(GregorianCalendar.DAY_OF_MONTH); dia ++){
						
		calendar.set(GregorianCalendar.DAY_OF_MONTH, dia);
		MinhaTabela t = new MinhaTabela();
		t.setDtTrabalho(calendar.getTime());
		//outros valores setados
		
		hSession.saveOrUpdate(t);			
	}
}

eu inclui:

Locale.setDefault(new Locale("pt", "BR"));

em um método estático e estou chamando este método antes de criar uma instancia de GregorianCalendar. Minhas datas foram para o banco com hora 0:00 ou 1:00.

Alguém sabe o que estou fazendo de errado?

Obrigada.

Curioso,

eu setei hora 12:00 ele jogou no banco hora 00:00 e 01:00

eu setei 06:00 e ele jogou no banco 18:00

eu setei 00:00 e ele jogou 12.

Vou deixar um valor diferente de 12 para ele não trocar para 0 ou 1 e depois trocar datas acrescentando dias.

Alguém sabe se isso será seguro? Fica feio? É gambiarra?

Obrigada.

Olá!

Ele está utilizando o formato am/pm pelo que falou.
Sua aplicação e o banco rodam sob a mesma JVM?
Já tentou instalar uma outra versão da JVM para ver o que acontece?

P.S.: Se sua solução funcionou, mantenha-a até encontrar exatamente a causa do problema.