728x90 반응형 영속성 컨텍스트2 batch insert하기 Spring Data JPA saveAll() vs 네이티브 쿼리 두 방식의 가장 큰 차이는 영속성 컨텍스트 사용 유무(메모리)와 동작 방식. Spring Data JPA에서 saveAll(Iterable)은 내부적으로 하나하나 save()를 호출하는 구조.for문 돌면서 persist(insert) 또는 merge(update)를 반복. ??? : saveAll 안쓰고 네이티브 쿼리 써도 @Transactional 을 쓰기 때문에 jdbc 버퍼에 저장되니까 메모리 쓰는건 똑같지않아? List list = createMillionEntities(); // 100만 개 생성myRepository.saveAll(list); saveAll()은 단순히 SQL만 실행하는 게 아니라 다음을 함1. 엔티티 객체 생성2. 모두 영속성 컨텍스트에 등록3. 변경 여부 추적(더티 .. 2025. 4. 4. JPA 영속성 컨텍스트, Dirty Checking, 쓰기 지연, Spring Data JPA, Hibernate, JDBC JPA의 영속성 컨텍스트(Persistence Context) - JPA가 관리하는 엔티티 객체들이 저장되는 메모리 공간(캐시) - JPA에서 엔티티를 persist(), find(), merge() 등을 하면 영속성 컨텍스트가 이를 관리 - 즉시 DB에 반영되지 않고 영속성 컨텍스트에 저장되었다가 트랜잭션이 commit()될 때 변경 사항을 한 번에 DB에 반영 (flush() 발생) : 쓰기 지연 (Write-Behind) - @Entity 가 붙은 클래스만 관리함!! - @Query 나 네이티브쿼리로 가져온 임의의 결과는 관리하지 않음 엔티티 생명주기 (4가지 상태)상태설명코드 예제비영속 (New) JPA가 관리하지 않는 상태Member member = new Member();영속 (Manag.. 2025. 4. 3. 이전 1 다음 728x90 반응형