Встречается на собеседованиях • сегодня

Как исключить наложение изменений документа пользователями в базе данных

Для исключения наложения изменений (race condition) в БД можно использовать:

  1. Оптимистичная блокировка - версионный контроль. Перед обновлением проверяем, что версия документа не изменилась:
java
@Entity
public class Document {
    @Version
    private int version;
    // другие поля
}

При конфликте будет выброшено OptimisticLockException.

  1. Пессимистичная блокировка - явная блокировка записи на время транзакции:
java
Document doc = em.find(Document.class, id, LockModeType.PESSIMISTIC_WRITE);

Блокирует запись до конца транзакции.

  1. CAS (Compare-And-Swap) операции:
sql
UPDATE documents 
SET content = 'new', version = version + 1 
WHERE id = 1 AND version = 2

Проверя affected rows, можно определить успешность операции.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы