Как предотвратить сохранение сущности одного типа, если сущность другого типа уже существует - PullRequest
0 голосов
/ 02 мая 2019

У меня есть объект типа 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 при фиксации).Как этого достичь?

...