如果违反约束,则由CrudRepository saveAll方法引发的异常

时间:2019-04-04 19:38:58

标签: java hibernate spring-boot spring-data-jpa

我正在使用spring data JPA将数据持久保存到数据库中。 CRUDRepository具有我正在使用的 saveAll(Iterable)方法。

由于我对实体字段具有唯一约束,所以我想知道如果我尝试保存一个包含违反此约束的对象的Interable会发生什么。

1 个答案:

答案 0 :(得分:1)

使用标准的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实例,并调用了persistmerge
这意味着它的规则适用,您将收到ConstraintViolationException