Исключение, создаваемое методом saveAll в CrudRepository, если ограничение нарушено - PullRequest
0 голосов
/ 04 апреля 2019

Я использую пружинные данные JPA для сохранения моих данных в базе данных. В CRUDRepository есть метод saveAll (Iterable) , который я использую.

Поскольку у меня есть уникальное ограничение на поле сущности, мне интересно, что произойдет, если я попытаюсь сохранить Interable, содержащий объект, который нарушает это ограничение.

1 Ответ

1 голос
/ 04 апреля 2019

Используя стандартный метод saveAll, начиная с SimpleJpaRepository, вы в основном вызываете несколько раз, один раз за экземпляр, метод save

@Transactional
public <S extends T> List<S> saveAll(Iterable<S> entities) {
    // ... Omitted

    for (S entity : entities) {
        result.add(save(entity));
    }

    return result;
}

@Transactional
public <S extends T> S save(S entity) {
    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}

Вы видите, что используется экземпляр EntityManager, вызывая persist или merge.
Это означает, что применяются его правила, и вы получите ConstraintViolationException .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...