Если это разные транзакции, вам может понадобиться Пессимистическая блокировка :
fun updateDatabase(entity: Entity) {
Entity entityMerged = entityManager.merge(entity);
entityManager.lock(entityMerged, LockModeType.PESSIMISTIC_WRITE);
Это создаст физическую блокировку строки базы данных.Когда другая транзакция попытается запросить эту, а первая еще не завершена, она получит PessimisticLockException
.
Затем вы можете поймать его и попытаться восстановить до снятия блокировки.
Только будьте осторожны , чтобы не злоупотреблять этой стратегией и действительно протестировать ее перед началом производства,Это может стать узким местом, если трафик интенсивный.