Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

dulvida lock otimista e pessimista

ola, gostaria de tirar 1 duvida sobre lock otimista e pessimista

lock otimista

Teria alguma forma de detectar quando já existe um usuário alterando aquele registro para alertar um outro usuário que vá tentar efetuar a alteração. Ou existe alguma forma de enquanto um usuário 1 estiver alterando um registro e um outro usuário 2 alterar o mesmo registro primeiro, avise o usuário 1 que o registro foi alterado sem ter q esperar o usuário terminar toda a sua alteração para só depois saber que o registro foi alterado e perca seu trabalho .

lock pessimista

Se eu tenho uma classe Pedido que tem relacionamento com uma classe Cliente, e um usuário está alterando o Cliente de um certo Pedido. o Pedido fica travado até o Cliente ser liberado? E se fosse a situação contraria.

3 respostas
solução!

Oi João, tudo bem?

Lock Otimista: Que eu saiba a JPA não possui nenhum recurso pra resolver esse problema já que isso tá mais pra lógica da aplicação :)

Lock Pessimista: Você consegue alterar os dados do pedido, mas não consegue trocar o relacionamento para um outro pedido. Pra impedir a alteracao do pedido você precisa lockar ele tb.

Mais infos: http://docs.oracle.com/javaee/6/api/javax/persistence/PessimisticLockScope.html

Abraços!

Bom dia leonardo! Obrigado pela resposta!

Poderia me dar uma dica do que eu poderia fazer então? Minha preocupação é que um usuário esteja fazendo um cadastro com 50 campos por exemplo, e ele só descubra que não vai consegui salvar as alterações por que outro usuário já alterou primeiro, e tenha que refazer todo o trabalho.

Oi João, para aplicar o lock otimista você pode usar a annotation @Version em cima de um atributo numérico ou algum tipo de Data(Date ou Calendar).

O hibernate vai atualizar essa coluna a mais na tabela informando a última versão do objeto. Caso alguém tente atualizar este objeto, passando uma versão igual ou menor, ele vai estourar exception.