Parece que você configurou o Hibernate para usar controle de simultaneidade otimista . Isso significa que sua tabela User tem um campo de versão que o Hibernate incrementa a cada atualização de linha.
Muito provavelmente, sua transação começa no início da solicitação HTTP e termina no final da resposta HTTP. Isso significa que o processo de edição de um usuário consiste em duas transações:uma transação para preencher o formulário web e uma transação para salvar as alterações.
Nesse caso, alterar o nível de isolamento do banco de dados não fará nenhum bem. Provavelmente, tudo o que você obterá é pior desempenho e escalabilidade .
Não é ruim ter
StaleObjectException
s. Ele reflete o mundo real - as pessoas realmente trabalham na mesma coisa de vez em quando e podem ocorrer conflitos. A questão é:quando um conflito é detectado, como você o resolve de uma maneira que satisfaça os usuários finais? Pode ser resolvido sem a assistência do usuário? As estratégias possíveis podem ser
-
substituir as alterações do usuário anterior (geralmente não o que você deseja - daí a necessidade de controle de simultaneidade),
-
mostrar uma mensagem de erro pedindo ao usuário para atualizar e realizar suas alterações novamente,
-
mesclar automaticamente as alterações sem substituir as alterações do usuário anterior (às vezes possível)
-
informar o usuário sobre a desatualização de seus dados e oferecer a ele uma maneira de mesclar manualmente suas alterações
Tudo depende do contexto.