Olá pessoal, estou com dúvidas quanto a utilização do @version e gostaria de saber a opinião de vocês quanto ao seguinte:
Em uma aplicação web, faço um load do objeto e monto um formulario html para alteração.
Primeiro caso: Quando o usuário clica em submit os dados vão para um servlet que deve recuperar(load - para que tenha o valor do atributo ‘version’) novamente o objeto do banco para alterar seus atributos e salvar(saveOrUpdate).
Segundo caso: assim como para o ‘id’, criar um campo oculto com o valor de ‘version’ também.
No primeiro caso, acho que o version não está sendo muito útil. Segue uma situação: O ‘usuarioA’ abre a página de alteracao do ‘registro X’, o ‘usuarioB’, em outra máquina, abre também o ‘registroX’, só que este termina a edição e salva primeiro suas alterações. Quando o ‘usuárioA’ for salvar, o servlet vai carregar o ‘registroX’ novamente, setar seus atributos e salvá-lo, sem perceber que haviam outras alterações.
No segundo caso, quando o ‘usuárioA’ for salvar, o hibernate saberá que o registro teve alguma alteração desde que foi carregado. Porém, por estar em um campo ‘hidden’, o atributo ‘version’ pode ser facilmente alterado pelo usuário para um número maior, o que seria uma vulnerabilidade.