Я использую Java Hibernate.
Вариант использования:
У меня есть 2 таблицы: A и B. Теперь, если B не содержит строки для accId x со статусом true, тогда статус accId x в таблице A должен быть изменен на ACTIVE, иначе он должен оставаться INACTIVE.
Текущее состояние таблиц A и B: B содержит 2 строки (с id = 1, 2), каждая из которых содержит accId как X и статус True. A содержит 1 строку с accId как X и статусом INACTIVE.
Теперь одновременно приходят 2 вызова для каждой из строк (id = 1, 2), пытающихся сделать статус accId X ложным для соответствующих строк.
Всякий раз, когда приходит какой-либо вызов, чтобы сделать статус любого accId ложным, я делаю статус ложным в таблице B для соответствующего идентификатора строки и проверяю из самой таблицы B, присутствует ли какая-либо другая строка со статусом true для этого идентификатора учетной записи. Если такой строки нет, я меняю статус accId на ACTIVE.
Теперь, в моем случае, если одновременно приходят 2 вызова, оба они проверяют, присутствует ли какая-либо строка со статусом true или нет, так как транзакция пока не зафиксирована и остается в памяти, каждый из них находит, что есть строка со статусом true статус true все еще присутствует. Таким образом, оба они отмечают свой статус как ложный в таблице для соответствующих строк. Но статус accId не меняется на ACTIVE в таблице A.
Как справиться с этой проблемой.