【问题标题】:Exception thrown by CrudRepository saveAll method if constraint is violated如果违反约束,则 CrudRepository saveAll 方法抛出异常
【发布时间】:2019-04-04 19:38:57
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    使用来自SimpleJpaRepository 的标准saveAll 方法,您基本上是多次调用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2019-02-04
      • 2014-10-08
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多