Sobes.tech
Junior — Middle

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.