Sandro Mueller:
bobmoe:
eu não entendi o que vc quis dizer com transações concorrentes.
quando nos referimos a transações no hibernate significa: tudo que estiver num determinado pedaço de código ou é todo executado ou nada é executado… para garantir a consistencia da operação. é isso q vc está se referindo?
Oi cara tudo bem,
bom transações concorrentes é o seguinte:
Imagine dois usuários(usuário A e usuário B) que querem alterar o mesmo registro de determinada entidade/tabela
o usuário A vai lá e lê o registro e enquanto ele está alterando na tela o usuário B vai lá e pega o mesmo registro tbm,
ai o A salva primeiro e o B salva logo após, as alterações feitas pelo usuário A serão perdidas…
Se vc tiver um controle de transações concorrente, na hora de salvar o usuário B recebera uma exceção explicando a
situação.
Sandro Mueller
isso eu sei

mas valeu!!! eu queria saber dentro do seu sistema como vc usava isso.
qualquer sgbd moderno cuida disso… não é algo que vc precisa implementar o conceito. só q vc precisa indicar para o banco onde essa transação começa e onde ela termina.
no hibernate isso é sinalizado da seguinte maneira:
Transaction tx = null;
try {
tx = sessao.beginTransaction();
debito(contaDebito);//exemplo
credito(contaCredito);//exemplo
tx.commit();
} catch (RuntimeException e) {
if (tx != null) tx.rollback();
throw e;
}
o q vc precisa entender é q o conceito de transação aqui é ineficaz para uma operação. talvez o q vc esteja querendo controlar é a ordem de chegada das atualizações.
ou seja, enquanto vc pedir uma atualização para o banco, aqla tabela vai recber um lock e não vai deixar outra pessoa atualisar o proximo campo antes de temrinar todo seu update. mas é só isso. agora ele não controla quem vai pegar essa tarefa primeiro.
aqui explica com mais detalhes a concorrencia no hinernate:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/transactions.html