티스토리 뷰
JPA의 플러시에 대해 알아보자.
이전 포스팅과 연결되므로 이전 포스팅을 참고하길 바란다.
(이전 포스팅 글씨를 누르면 이동할 수 있다.)
🤔 플러시는 언제 발생할까?
데이터 베이스 트랜잭션이 일어나면 플러시는 자동으로 일어난다!
지난 포스팅에서
db에 쿼리는 commit할 때 날아간다고 했다.
그런데 만약 내가 comimit 하기 전에
db에 쿼리가 제대로 날아가는지 확인하고 싶다면 어떻게 해야할까?
바로 이렇게 하면 된다
em.flush()를 하게 되면
db에 쿼리가 바로 날아간다.
그럼 확인해보자.
보이는가?
구분을 위해 그어둔
================선이
쿼리문 뒤에 나타났다.
플러시에 대해 정리해보자
플로시는
영속성 컨텍스트를 비우지 않고,
영속성 컨텍스트의 변경내용을 데이터베이스에 동기화한다.
트랜잭션이라는 작업 단위가 중요하다(커밋 직전에만 동기화 하면 된다.)
그럼 준영속은 뭘까?
영속 상태의 엔티티가 영속성 컨텍스트에서 분리되는 것을 말한다.
영속성 컨텍스트가 제공하는 기능을 사용하지 못한다.
준영속 상태로 만드는 방법은 크게 세 가지가 있다.
- em.detach(entity) : 특정 엔티티만 준영속 상태로 전환
- em.clear() : 영속성 컨텍스트를 완전히 초기화
- em.close() : 영속성 컨텍스트를 종료
코드를 통해 확인해보자.
위와 같이 150번 멤버의 이름은 "AAAAA"로 바꾸기 위해
코드를 작성하고
em.detach(member);를 실행했다.
결과는 어떻게 나올까?
DB에서 150번 회원을 조회하고(select)
그 회원의 이름은 AAAAA로 변경(update)할까?
결과를 확인해보자.
예상했던 것과 달리 select문만 실행되었다.
말그대로 detach
즉, 분리했기 때문에
영속성 컨텍스트에서 관리하지 않아서
DB에서 가져오는 150번 멤버를 가져오는
select 쿼리만 실행한다.
따라서
detach의 경우
해당하는 모든 내용이 영속성 컨텍스트에서 빠진다!
이렇게 영속 상태였다가 영속성 컨텍스트에서 빠지는 것을
준영속 상태라고 한다!
'프로그래밍 > JPA' 카테고리의 다른 글
[JPA] @Enumerated란 무엇이며 어떻게 사용할까? 🤔 (0) | 2022.06.09 |
---|---|
[JPA] @Embedded , @Embeddable란 무엇이며 언제 사용할까? 🤔 (0) | 2022.06.08 |
[JPA] 엔티티 설계시 주의할 점 (0) | 2022.06.06 |
[JPA] 영속성 관리 - 내부 동작 방식 (0) | 2022.03.10 |
[JPA] JPA 시작하기 (0) | 2022.03.10 |
- Total
- Today
- Yesterday
- JPA
- 22 정보처리 산업기사
- 22 정보처리산업기사
- Java
- queue
- 개발자
- 코드
- 챌린지
- 디버깅
- 해커랭크 챌린지
- 소스코드
- 풀이
- 정보처리산업기사 공부법
- 자바
- 해커랭크 자바
- 그리디
- 강의
- hackerrank challenges
- hackerrank
- stack
- 해커랭크
- ORM
- 백준
- LinkedList
- 정보처리 산업기사
- 자바의 정석
- 해커랭크 자바 챌린지
- challenges
- BAEKJOON
- 정보처리산업기사
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |