【发布时间】:2019-04-04 19:38:57
【问题描述】:
我正在使用 Spring Data JPA 将我的数据保存到数据库中。 CRUDRepository 具有我正在使用的 saveAll(Iterable) 方法。
由于我对实体字段有唯一约束,我想知道如果我尝试保存包含违反此约束的 Object 的 Interable 会发生什么。
【问题讨论】:
标签: java hibernate spring-boot spring-data-jpa
我正在使用 Spring Data JPA 将我的数据保存到数据库中。 CRUDRepository 具有我正在使用的 saveAll(Iterable) 方法。
由于我对实体字段有唯一约束,我想知道如果我尝试保存包含违反此约束的 Object 的 Interable 会发生什么。
【问题讨论】:
标签: java hibernate spring-boot spring-data-jpa
使用来自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 实例,调用persist 或merge。
这意味着它的规则适用,您将收到ConstraintViolationException。
【讨论】: