У меня есть объект типа EntityA
, который я хочу сохранить (в частности, вставить) в базу данных, только если объект типа EntityB
еще не существует в базе данных.EntityA
имеет свойство, которое можно использовать для проверки, существует ли EntityB
.
Я пытался проверить, что EntityB
еще не существует до вставки EntityA
:
@Transactional
public void saveEntityAIfEntityBNotExist(EntityA a) {
if (entityBRepository.existsByCommonStringProp(a.getCommonStringProp())) {
throw new DataIntegrityViolationException("one or more entityBs already exist.");
}
entityARepository.save(a);
}
Проблема с этим кодом заключается в том, что какой-то другой пользователь мог сохранить и зафиксировать EntityB
с общей строкой пропел между проверкой существования и сохранением.
Желаемый результат будет для отката транзакции, если после фиксации EntityB
теперь существует.То же самое относится и к сохранению EntityB
(т.е. необходимо проверить, существует ли EntityA
при фиксации).Как этого достичь?