| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- PYTHON
- jpa
- 데이터베이스
- DFS
- Docker
- 영속성 컨텍스트
- CSS
- db
- It
- spring
- websocket
- javascript
- java
- mysql
- HTML
- OS
- 완전탐색
- redis
- Algorithm
- 운영체제
- Data structure
- BFS
- 알고리즘
- nosql
- CS
- 트러블슈팅
- 백준
- 프로그래머스
- 트랜잭션
- 자료구조
- Today
- Total
If at first you don't succeed, try again
[JPA] 영속성 컨텍스트 본문
* 영속성 컨텍스트란?
엔티티를 영구 저장하는 환경이라는 뜻이다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.
em.persist(member);
persist() 메서드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다.
* 엔티티의 생명주기
- 비영속(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태
- 영속(managed) : 영속성 컨텍스트에 저장된 상태
- 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
- 삭제(removed) : 삭제된 상태
* 비영속
// 객체를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setUserName("회원1");
엔티티 객체를 생성했지만 순수한 객체 상태이고, 저장하지 않았다. 따라서 현재 상태는 비영속이라고 할 수 있다.
* 영속
//객체를 저장한 상태(영속)
em.persist(member);
엔티티 매니저의 persist() 메서드를 사용함으로써 엔티티를 영속성 컨텍스트에 저장했다. 이렇게 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라고 한다. 즉, 영속 상태라는 것은 영속성 컨텍스트에 의해 관리된다는 것이다.
* 준영속
//회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(member);
특정 엔티티를 준영속 상태로 만들려면 em.detach()를 호출하면 된다. em.close()를 호출해서 영속성 컨텍스트를 닫거나 em.clear()를 호출해서 영속성 컨텍스트를 초기화해도 영속성 컨텍스트가 관리하던 영속 상태의 엔티티는 준영속 상태가 된다.
* 삭제
//객체를 삭제한 상태(삭제)
em.remove(member);
em.remove()를 호출하면 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제한다.
* 영속성 컨텍스트의 특징
- 영속성 컨텍스트와 식별자 값 : 영속성 컨텍스트는 식별자 값으로 구분한다. 따라서 영속 상태는 식별자 값이 반드시 있어야 한다. 식별자 값이 없으면 예외가 발생한다.
- 영속성 컨텍스트와 데이터베이스 저장 : JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영하는데, 이것을 플러시라고 한다.
- 영속성 컨텍스트의 장점
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지
- 지연 로딩
'Java > JPA' 카테고리의 다른 글
| [JPA] Flush와 Commit의 차이 (0) | 2025.03.21 |
|---|---|
| [JPA] Entity Manager (0) | 2025.02.12 |
| [JPA] JPA 기초 및 개념 (0) | 2025.02.11 |