스프링 2

JPA의 영속성 컨텍스트와 변경 감지(Dirty Checking)

영속성 컨텍스트와 변경 감지 완전 정복JPA로 개발을 하다 보면 아래와 같은 코드를 자주 보게 됩니다. @Transactionalpublic void updateUsername(Long id, String newName) { User user = userRepository.findById(id).orElseThrow(); user.setUsername(newName); // 이게 저장된다고?} Colored by Color Scriptercs 별도로 save()를 호출하지 않았는데, 값이 데이터베이스에 반영됩니다.이러한 동작은 JPA의 변경 감지(Dirty Checking) 기능 덕분입니다.이번 글에서는 이 원리가 어떻게 작동하는지 설명드리고, 실무에서 자주 발생하는 실수들과 실전 팁도 함..

스프링 2025.06.21

[JPA] 영속성 관리[4]

플러시 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 과정이다.변경 감지가 동작해서 영속성 컨텍스트의 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 수정된 엔티티는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다.쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다 영속성 컨텍스트를 플러시하는 방법 em.flush() 직접 호출트랜잭션 커밋 시 자동 호출JPQL 쿼리 실행 시 자동 호출 플러시 모드 옵션 엔티티 매니저에 플러시 모드를 직접 지정하려면 javax.persistence.FlushModeType을 사용하면 된다.FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 플러시(기본값)FlushModeType.COMMIT : 커밋할 때만 플러시 * 플러..

스프링 2024.12.09
728x90
반응형