일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- OpenCV
- 코딩테스트
- 프로그래머스
- 구조체배열
- C++
- nestjs typeorm
- python
- TypeORM
- thymeleaf
- @Autowired
- 코테
- nestJS
- 파이썬
- AWS
- C언어
- 카카오 알고리즘
- git
- nestjs auth
- 카카오
- Nodejs
- 컴포넌트스캔
- @Component
- 카카오 코테
- Spring
- 시스템호출
- 해시
- 스프링
- spring boot
- 알고리즘
- 가상면접사례로배우는대규모시스템설계기초
Archives
- Today
- Total
공부 기록장 💻
[Spring/JPA] 영속성 컨텍스트의 flush란? 본문
자바 ORM 표준 JPA 프로그래밍 - 기본편(인프런) 참고
Flush란?
플러시란, 영속성 컨텍스트의 변경 내용(Insert, Update, Delete 등)을 데이터베이스에 반영하는 것을 말한다.
Flush 발생한 경우에는,
1) 변경을 감지하고
2) 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록하고,
3) 쓰기 지연 SQL 저장소의 쿼리들을 데이터베이스에 전송하게 된다.
Flush를 수행하는 방법들
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(); // 결과 없음
1. em.flush() - 직접 호출
트랜잭션의 commit이 수행되기 전 직접 호출하여 쓰기 지연 SQL 저장소의 쿼리들을 DB에 적용할 수 있다.
2. transaction.commit() - flush 자동 호출
3. JPQL 쿼리 실행 - flush 자동 호출
JPQL 쿼리 실행 시에는 flush를 자동적으로 호출한다.
다만 아래와 같이 플러시 모드 옵션 지정을 하여 commit이 실행될 때만 DB에 적용되도록 할 수도 있다.
em.setFlushMode(FlushModeType.COMMIT);
// FlushModeType.AUTO : 커밋이나 쿼리 실행할 때 플러시 (기본값)
// FlushModeType.COMMIT : 커밋을 수행할 때만 플러시
Flush 의 특징
1) 영속성 컨텍스트를 비우지 않는다.
쓰기 지연 SQL 저장소에 있는 쿼리들을 DB에 반영하는 업무만 수행함!
2) 영속성 컨텍스트의 변경 내용을 DB에 동기화한다.
3) 트랜잭션이라는 작업 단위가 중요하다. 커밋 직전에만 동기화하면 됨!
728x90
반응형
'# Tech Studies > Java Spring • Boot' 카테고리의 다른 글
[Spring/JPA] 양방향 연관관계와 연관관계의 주인, mappedBy 란? (0) | 2023.04.25 |
---|---|
[Spring/JPA] JPA (Java Persistent API) 란? (0) | 2023.04.24 |
[Spring] 빈 스코프란? (Singleton, Prototype Scope) (1) | 2023.03.22 |
[Spring] @JsonProperty를 이용해 Json 데이터의 파라미터 key 값을 변경하여 전달하기 (0) | 2023.02.21 |
[Spring/Thymeleaf] 타임리프 템플릿 View에서 서버로부터 전달된 model 객체의 필드 값이 null인 경우 해결하기 (Safe Navigation Operator, ${객체?.필드}) (0) | 2023.02.16 |
Comments