Olá pessoal,
o post de hoje é com datas. Quem aqui nunca sofreu quando precisou manipular datas? Sempre quando vou trabalhar com datas busco gastar um bom tempo na investigação com base nos requisitos para ver se encontro a melhor forma possível de implementar, buscando sempre atingir uma manutenção fácil e code clear. Veremos o suporte que temos via annotations que pode nos ajudar bastante.
Lets go…
Contexto
Um dia desses precisei salvar datas e que em seguida uma StoredProcedure(SP) ia precisar ler. Até ainda nenhum problema aparentemente. Mas, ele surgiu quando tive chamar as SP via Hibernate e passar a data que estava em uma tabela no formato salvo: 2011-07-04 00:20:00. O Hibernate ao ver os dois-pontos vai achar o que vem depois é uma variável e vai buscar ler o valor, como não dar exceção. Claro poderiamos resolver esse problema de fazer o Hibernate ignorar os dois-pontos usando aspas simples, mas não ficar nada friendly essa parte do código. Então como resolver?
Bem, para resolver eu preciso à hora da data, posso fazer isso via Java ou no Banco. Mas, se eu não tiver acesso o banco e somente as informações de onde salvar e os dados que preciso, como resolver isso?
Se ter Hora/Minute não for importante, então vamos ignorar ela com o annotation @Temporal e informar que somente iremos persistir à data.
Desenvolvimento
Classe Pedido
//… omitido
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name=“CLI_PEDIDO”)
public class Pedido {
@Id
@GeneratedValue
@Column(name=“ID_PEDIDO”)
private int idPedido;
@Column(name=“DATE_PEDIDO”)
@Temporal(TemporalType.DATE)
private Date datePedido;
Classe Main
Pedido pedido = new Pedido();
pedido.setListProdutos(listProduto);
pedido.setCliente(cliente);
pedido.setCondicaoPgto(“Dinheiro 30/60/90 dias/à vista”);
pedido.setDatePedido(new Date());
Resultado
A seguir temos o resultado:
Note
No Java quando trabalhamos com data, o retorno do objeto é uma TimeStamp (data +hora) e poderiamos manipular para obter apenas a data ou poderiamos usar a classe java.sql.Date que permite salvar apenas a Data. Particulamente, colocar uma anotação, achei mais simples e flexivel, pois hoje não preciso do horário, mas se amanha precisar, a única mudança que faremos é mudar anotação e o código é mantido, uma vez que já temos à nível de codificação data com hora.
Vou ficando por aqui, espero que tenham gostado do post.
Abracos, see ya!!guys! 🙂
Valeu!
Ajudou a solucionar um problema besta que eu tinha
obrigado Jonas pelo feedback.