Can I mix both update and insert in saveAll from JpaRepository

限于喜欢 提交于 2021-02-19 04:43:06

问题


I am using Spring Boot and Spring Data JPA and Hibernate as the persistence provider. I have extended my Repository interface with JPARepository. I have a list of Entity Bean for a table. Some of them already exist and some of them not.

I want to know what will happen when I call saveAll from my service layer and pass this List?


回答1:


If you look at the SimpleJpaRepository which is a common implementation of the CrudRepository you can see that it will simply invoke save for each of the elements:

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

    Assert.notNull(entities, "The given Iterable of entities not be null!");

    List<S> result = new ArrayList<S>();

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

    return result;
}

The save itself distinguishes itself whether to persist or merge the given entity:

@Transactional
public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}

So to answer your question.. yes you can mix both new and existing entities in the passes list.



来源:https://stackoverflow.com/questions/57551679/can-i-mix-both-update-and-insert-in-saveall-from-jparepository

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!