Como implementar um mecanismo de bloqueio otimista no Hibernate para evitar conflitos no acesso simultâneo aos dados?
sobes.tech IA
Resposta da IA
O bloqueio otimista no Hibernate é implementado usando a anotação @Version. Esta anotação adiciona um campo especial (por exemplo, version) à entidade, que é automaticamente incrementado a cada atualização do registo. Ao guardar, o Hibernate verifica se a versão na base de dados corresponde à versão do objeto que está a ser atualizado. Se as versões não coincidirem, significa que os dados foram alterados por outra transação, e uma exceção OptimisticLockException é lançada.
Exemplo:
@Entity
public class Product {
@Id
private Long id;
@Version
private int version;
private String name;
private int quantity;
// getters e setters
}
Desta forma, ao aceder simultaneamente a um mesmo registo, se um utilizador atualizar os dados e outro tentar guardar uma versão desatualizada, o Hibernate detectará o conflito e impedirá a sobrescrição dos dados sem considerar as alterações do outro utilizador.