Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- orm
- mapping
- DynamoDB
- 스터디
- Spring Boot
- QueryDSL
- codebuild
- backenddeveloper
- Docker
- rds
- backend
- goorm
- sqs
- codedeploy
- CodeCommit
- jpa
- kakao
- 자격증
- ec2
- CICD
- spring
- 오블완
- aws
- s3
- Redis
- 백엔드
- 티스토리챌린지
- serverless
- MSA
- 개발자
Archives
- Today
- Total
gony-dev 님의 블로그
[JPA] 자바 ORM 표준 JPA 프로그래밍 - 영속성 관리(플러시와 준영속 상태) 본문
JPA에서 가장 중요한 것 2가지는
객체와 관계형 데이터베이스 매핑(=ORM)
영속성 컨텍스트
이다!
플러시
"플러시"란 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 행위를 뜻한다.
- 본래 데이터베이스의 변경사항을 실행하여 커밋한다면 이를 감지하고 플러시를 하는 과정이 일어난다. 플러시는 커밋할 시에 자동 순차적으로 진행이 되지만 플러시를 한다고 해서 커밋이 되지는 않는다!
플러시를 발생했을 경우
- 엔티티의 변경을 감지
- 수정된 엔티티가 있다면 영속성 컨텍스트에 있는 쓰기 지연 SQL 저장소에 쌓아둔다.
- 쓰기 지연 SQL 쿼리
- 지금까지 쌓아온 쿼리들을 모두 내보내고 실행한다.
※ 플러시가 발생했다고 해서 영속성 컨텍스트가 비워지는 것은 아니다. 만일 이것까지 비우고 싶다면 "em.clear();"를 호출하여 깔끔하게 비우면 된다.
영속성 컨텍스트를 플러시하는 방법?
- 플러시하는 방법은 직접 호출과 자동 호출로 나뉜다.
- 직접 호출은 "em.flush();" 코드 한 줄이면 끝난다.(em은 EntityManager를 선언한 변수)
- 자동 호출은 트랜잭션 커밋을 실행 OR JPQL 쿼리를 실행할 경우 일어난다.
준영속 상태
준영속은 영속과 달리 영구 저장하지 못하는 환경이다.
영속 상태의 엔티티가 영속성 컨텍스트에서 분리되어 영속성 컨텍스트가 제공하는 기능을 사용하지 못한다.
엔티티를 준영속 상태로 만드는 방법
- 총 3가지 방법이 있다!(EntityManager em이라 가정)
- em.detach(entity);
- 특정 엔티티만 준영속 상태로 전환한다.
- em.clear();
- 영속성 컨텍스트를 완전히 초기화한다.
- em.close();
- 영속성 컨텍스트를 종료시킨다.
- em.detach(entity);
정리하자면..
1. 영속성 컨텍스트의 변경사항을 데이터베이스에 반영하는 행위이다.
2. 플러시가 발생할 경우, 엔티티의 변경을 감지하고 쓰기 지연 SQL 저장소에 쌓아두었던 쿼리들을 실행한다.
3. 준영속 상태는 엔티티를 영속성 컨텍스트에서 분리하여 제공받는 기능을 더이상 사용하지 못하는 상태를 의미한다.
4. 준영속 엔티티로 만드는 방법은 특정 엔티티만 'detach'를 사용하여 분리하거나, 영속성 컨텍스트를 초기화, 종료 시키는 방법들이 있다.
'Spring > JPA' 카테고리의 다른 글
[JPA] 고급 매핑 (0) | 2024.11.10 |
---|---|
[JPA] 자바 ORM 표준 JPA 프로그래밍 - 다양한 매핑관계 (1) | 2024.09.04 |
[JPA] 자바 ORM 표준 JPA 프로그래밍 - 엔티티 매핑 (0) | 2024.08.28 |
[JPA] 자바 ORM 표준 JPA 프로그래밍 - 영속성 관리 (0) | 2024.08.08 |
[JPA] 자바 ORM 표준 JPA 프로그래밍 - JPA를 사용해야 하는 이유? (0) | 2024.07.29 |