Olá pessoal …
Bom, aproveitando que o tópico ainda é " meio recente ", eu passei por uma situação que só consegui resolver usando transaction na consulta, e vou aproveitar para expor essa situação…
Antes de mais nd, eu uso o postgre de SGBD, para obter a hora do servidor eu uso a funcao " select localtimestamp(0) " e uso o framework de persistencia Hibernate.
O problema:
Por exemplo, na tabela venda que possui um campo datavenda, quando eu salvo varias vendas sem fechar a tela, o horario da venda nao se repete…
Ja na tela pra gerar relatorio de lancamentos, ela busca a data/hora atual do servidor, mas se eu mandasse gerar 10 relatorios sem fechar a tela, os 10 relatorios tinham a mesma data de geração…
A funcao " select localtimestamp(0) ", na verdade nao retorna a data/hora atual, neim os outros comandos relacionados como o current timestamp(0) por exemplo, essas funcoes retornam a data/hora do inicio da transacao. Entao o que acontecia era que o metodo salvar, iniciava uma transacao salvava o objeto e logo em seguida fazia um commit, finalizando a transacao, fazendo com que o proximo objeto a ser salvo, iniciasse uma nova transacao e com isso obtendo a data/hora atual. Ja na geracao do relatorio, na primeira consulta, era iniciada um objeto Session, sem associar ela a um objeto Transaction.
Entao se eu mandasse gerar um relatorio as 10:00 o primeiro iria sair com a data certa, mas o segundo relatorio vamos supor, as 10:05, tbem iria sair com o horario das 10:00, pq a transacao foi iniciada as 10:00 e nao foi finalizada, entao o que eu fiz foi associar esse objeto Session a um objeto Transaction, e fazer um beginTransaction(), antes de mandar consultar, e após a consulta é feito um commit(), caso seja lancada alguma excessao, um rollback().
Eu também achei estranho fazer dessa forma, mas se a gnt parar pra analizar, um transaction, é uma transacao, uma comunicacao com o banco de dados, e vc pode querer finalizar essa transacao, como aconteceu comigo, nessa questao da data atual ai…
Gostaria de saber a opiniao de vcs referente a solução que fiz, posso continuar usando isso, ou nao esta correto fazer dessa forma…
vlw t+