Duvida Hibernate + campo tipo Time

7 respostas
M

bem gente, no banco de dados existe um campo tipo Time que armazena uma determinada hora. Atualmente estou persistindo os dados com hibernate usando a classe java.sql.Time, e setando as horas com o metodo do construdor dele que recebe uma string e converte em horas.
Porém percebi que a maioria dos métodos dessa classe esta depreciado, o proprio metodo construtor está.

Pesquisando por ai vi muita gente indicando a usar java.util.Date ou Calendar, porém no meu caso eu não estou lidando com Timestamp (DATA e HORA). Estou manipulando apenas horas, o tipo de campo no bd é apenas TIME, não é TIMESTAMP. Nesse projeto datas e horas serão tratados separadamente e não juntos.

Então como se trabalha com horas? que método usar para persistir? Além de persistir a aplicação tb terá que realizar operações com horas, tipo somar horas, relação entre dinheiro e hora, minuto = 10 centavos, 1 real = 100 minutos, 02:45:00 + 00:25:00 = 03:00:00.

Agradeço a ajuda que vcs vem dando.

7 Respostas

W
@Temporal(TemporalType.TIME)
   @Column
   private java.util.Date hora;

Já fez assim?

M

ta mais como setar a hora para a variavel hora?

Essa hora será informada pelo usuário sendo assim ele digitará apenas a hora.

W

Implementa assim no seu SET… :wink:

Date minhaData = new Date(); // Substituir por sua data...
	   
	   Calendar calendar = Calendar.getInstance();
	   calendar.setTime(minhaData);
	   
	   calendar.set(Calendar.HOUR,   1);
	   calendar.set(Calendar.MINUTE, 1);
	   calendar.set(Calendar.SECOND, 1);
	   
	   minhaData = calendar.getTime();
M

hoho show de bola

G

Nativamente tanto JPA como Hibernate, Eclipselink e outros usam a classe Date ou Calendar sem diferenciar se você usa time, date ou datetime. Ou seja, você usa no Java apenas esses dois tipos mesmo que você queria apenas time, porém no banco de dados ele irá gravar apenas time, date ou timestamp (date + time).

O Hibernate é bem inteligente e mesmo você incluindo uma data completa (ex 2001-01-01 10:15) ele irá gravar apenas o time (ex 10:15) e ignorar a data.

Porém se você quiser ter um objeto Time diferente de Date e DateTime você pode então usar o joda-time que possui um plugin para usar com Hibernate. No Joda você possui diferença entre Time, Date e DateDate.

M

Entendo, vi muita gente falando que pra realizar operações envolvendo horas e datas existe o Joda, porém se existir uma maneira mais nativa eu prefiro, to correndo contra o tempo e aprender uma api nova vai ser osso.

Existe alguma maneira mais nativa de realizar as operações envolvendo hora que citei no topo do tópico?

Agradeço a ajuda de vcs.

G

Sim, há. Você deve então no Java usar Date e maperar no hibernate como Time.

@Temporal(TemporalType.TIME) private Date minhaData;

E para exibir a data basta você formata-la usando o SimpleDateFormat com o pattern HH:mm:ss. Se seu projeto é web no JSTL você pode usar a tag fmt:formatDate type=“time”.

Criado 7 de maio de 2010
Ultima resposta 7 de mai. de 2010
Respostas 7
Participantes 3