Transactions no Hibernate

Pessoal, toda vez que vou executar um método como o save, delete entre outros no Hibernate, preciso sempre iniciar uma Transaction antes de utilizar cada método ou eu posso ter uma que sirva para todos?

Agradeço a todos.

Abraço.

Poder você pode, e inclusive é recomendado que tenha.

Você só deve ter mais de uma transação em uma determinada ação se a atomicidade dela for bem peculiar.

Então por exemplo, imagina que vc tenha o seguinte caso: Vc deve efetuar o login do usuário, gravar um log de acesso dele e listar as mensagens iniciais dele e gravar no banco essas mensagens como já recebidas. Nesse caso a demarcação da transação envolverá (claro, seu conceito pode ser diferente, mas nesse caso assumimos que seja assim a regra) todas essas operações, se uma falhar, nada será efetivado.

Um outro caso, usando a mesma situação é: A gravação do log é independente, ou seja, se ocorrer problemas não afetará o andamento do sistema. Então aí você teria duas transações, uma para a gravação do log de acesso e outra para o login do usuário, listagem de mensagens e gravar como lidas.

Ficou claro?

Cada vez que vc inicia uma Transaction, é uma nova transação criada. Dai depende do contexto para vc usar.

Muito boa a explicação acima, mostra bem como é feito na prática.

Recomendo vc dar uma lida na própria documentação do Hibernate, na parte de transações, vai sanar bem suas dúvidas.

http://www.hibernate.org/hib_docs/v3/reference/en/html/transactions.html

A algum tempo, comecei a trabalhar com o Spring. Deixo ele fazer isso pra mim, ganho velocidade no desenvolvimento e não esquento mais com esses detalhes. Recomendo aprender Spring 2.5. Possui anotações no estilo EJB 3, e é bem fácil de se entender.

PS: O livro Spring in Action (second edition) possui muito bom material para entendimento. Outra boa é pegar o manual de referência no próprio site do framework.

[quote=djemacao]A algum tempo, comecei a trabalhar com o Spring. Deixo ele fazer isso pra mim, ganho velocidade no desenvolvimento e não esquento mais com esses detalhes. Recomendo aprender Spring 2.5. Possui anotações no estilo EJB 3, e é bem fácil de se entender.

PS: O livro Spring in Action (second edition) possui muito bom material para entendimento. Outra boa é pegar o manual de referência no próprio site do framework.[/quote]

Também fiz essa escolha, e realmente é show de bola trabalhar com o Spring 2.5 !
Otimiza mto o desenvolvimento.

Deixe-me ver se eu entendi pafuncio. Devo tomar cuidado em utilizar uma única transação, pois caso ela falhe qualquer operação depois não será efetivada, certo? Mas no caso em que tenho um DAO com ações de salvar, remover, listar que não são executadas em sequência, posso optar por uma só transação?

Quinger e djemacao, obrigado pelas referencias, assim que puder darei uma olhada.

Agradeço a todos.

[quote=m4des]Deixe-me ver se eu entendi pafuncio. Devo tomar cuidado em utilizar uma única transação, pois caso ela falhe qualquer operação depois não será efetivada, certo? Mas no caso em que tenho um DAO com ações de salvar, remover, listar que não são executadas em sequência, posso optar por uma só transação?

Quinger e djemacao, obrigado pelas referencias, assim que puder darei uma olhada.

Agradeço a todos.

[/quote]

Cara, são transações diferentes dai, por exemplo vc tem um objeto Pais. Quando vc vai salvar, vc abre a transação e salva, quando vc vai deletar vc abre a transação e deleta.
O caso de usar a mesma transação seria quando se tem por exemplo uma transferencia bancária:

void transferirDinheiro(contaDestino, contaAtual, valor) {
abre transação;
contaAtual.remove(valor);
contaDestino.addValor(valor);
fecha transação;
}

tipo a intenção acima foi mostrar q pode fazer várias operações dentro de uma transação. mas dai tem as condições, se der pau, da rollback() caso contrário dá commit(); e depois que a transação é fechada!

Agora entendi!

Valeu Quinger!