Reference. 자바 ORM 표준 JPA 프로그래밍
책 목차 및 이전 글
더보기
- 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영
플러시 실행 순서
- 변경감지가 동작 모든 엔티티를 스냅샷과 비교해서 수정 엔티티를 찾음
- 수정된 엔티티는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록
- 쓰기 지연소 SQL 저장소의 쿼리를 데이터베이스의 전달
영속성 컨텍스트를 플러시하는 방법 3가지
em.flush()
를 직접 호출
- 트랜잭션 커밋 시 플러시 자동 호출
- JPQL 쿼리 실행 시 플러시 자동 호출
- 직접 호출
- 엔티티 매니저의
flush()
메소드를 직접 호출, 강제로 플러시
- 거의 사용하지 않으며, 테스트나 다른 프레임워크와 JPA를 사용할때 간혹 쓰임
- 엔티티 매니저의
- 트랜잭션 커밋 시 플러시 자동 호출
- 데이터베이스에 변경 내용을 전달하지 않고 트랜잭션 커밋시 반영이 안됌
- JPA는 위와 같은 상황을 예방하고자 트랜잭션 커밋할 때 플러시를 자동 호출
- JPQL 쿼리 실행 시 플러시 자동 호출
- 쿼리를 실행하기 직전에 영속성 컨텍스트를 플러시해서 변경 내용을 반영 필요
- JPA는 JPQL을 실행할 때 플러시를 호출하여 쓰기 지연 저장소와 데이터베이스를 동기화
//JPQL 쿼리 플러시의 예
em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
//중간에 JPQL 실행
query = em.createQuery("select m from Member m", Member.class);
List<Member> members = query.getResultList();
3.5.1 플러시 모드 옵션
- 플러시 모드를 직접 지정하려면
javax.persistence.FlushModeType
을 사용FlushModeType.AUTO
: 커밋이나 쿼리를 실행할 때 플러시 (기본값)
FlushModeType.COMMIT
: 커밋할 때만 플러시
- 플러시를 통해 엔티티를 지우는 것이 아니라, 변경 내용을 데이터베이스와 동기화하는 작업
em.setFlushMode(FlushModeType.COMMIT) //플러시 모드 직접 설정
'개발서적 > 자바 ORM 표준 JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 4.1 - 4.3 @Entity, @Table, 다양한 매핑 (0) | 2021.08.03 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 3.6 준영속 (0) | 2021.07.28 |
[자바 ORM 표준 JPA 프로그래밍] 3.4 영속성 컨텍스트의 특징 (0) | 2021.07.28 |
[자바 ORM 표준 JPA 프로그래밍] 3.3 엔티티의 생명주기 (0) | 2021.07.28 |
[자바 ORM 표준 JPA 프로그래밍] 3.2 영속성 컨텍스트란? (0) | 2021.07.28 |