복붙노트

[SPRING] CrudRepository와 Hibernate : 트랜잭션에 save (Entity)를 저장 (List <S>)

SPRING

CrudRepository와 Hibernate : 트랜잭션에 save (Entity)를 저장 (List )

내가 그렇게하면 어떤 변화가 있겠는가?

@Transactional
public void processData() {
    List<MyEntity> entities = ....;
    MyEntityRepository.save(entities);
}

@Transactional
public void processData() {
    List<MyEntity> entities = ....;
    for (MyEntity entity : entities) {
        MyEntityRepository.save(entity);
    }
}

기본 쿼리 및 성능면에서의 차이점은 무엇입니까?

해결법

  1. ==============================

    1.SimpleJpaRepository에서 :

    SimpleJpaRepository에서 :

    @Transactional
    public <S extends T> List<S> More save(Iterable<S> entities) {
    
        List<S> result = new ArrayList<S>();
    
        if (entities == null) {
            return result;
        }
    
        for (S entity : entities) {
            result.add(save(entity));
        }
    
        return result;
    }
    

    따라서 두 번째 비즈니스 메소드는 목록을 반복하고 사용자를 대신하여 save (S)를 호출한다는 의미에서 그림자 (Iterable 엔터티) Crud Repository 메서드 만 저장합니다.

    트랜잭션이 processData 비즈니스 메소드에서 구분되는 한 성능이나 쿼리가 실제로 실행되는 것은 아닙니다.

  2. ==============================

    2.Ori Dar가 언급 한 바와 같이 실제로 차이점은 없습니다.

    Ori Dar가 언급 한 바와 같이 실제로 차이점은 없습니다.

    그러나주의해야 할 사항이 있습니다. 요소 목록을 저장하는 데 사용 된 메소드는 2.2.0.M1의 List saveAll (Iterable entities)로 이름이 바뀌 었습니다. repo 히스토리를 저장하고 save 메소드는 더 이상 인수를 인수로 취하지 않습니다.

    위의 답변이나 질문에 대한 평판이 50 점이 아니기 때문에이 변경 사항에 대한 새로운 대답을 작성해야합니다.

  3. from https://stackoverflow.com/questions/32793403/crudrepository-and-hibernate-savelists-vs-saveentity-in-transaction by cc-by-sa and MIT license