Skip to content

Commit 21ea535

Browse files
committed
week3 hoonww
1 parent c0911cf commit 21ea535

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

week3/Persistence Context.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# 영속성 컨텍스트
2+
3+
## 서론
4+
5+
ORM : 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것<br>
6+
Hibernate : ORM 기술에 대한 명세인 JPA의 구현체 중 하나<br>
7+
<br>
8+
DB와 자바 코드를 연결!
9+
10+
## EntityManager
11+
12+
엔티티를 저장, 수정, 삭제, 조회하는 말그대로 매니저<br>
13+
동시성 문제로 인해 여러 쓰레드 간에 공유되어서는 안된다
14+
15+
## 영속성 컨텍스트
16+
17+
EntityManager를 통해서 엔티티를 영속성 컨텍스트에 저장한다<br>
18+
19+
### 엔티티의 4가지 상태
20+
21+
1. 비영속<br>
22+
영속성 컨텍스트와 전혀 상관없는 상태<br>
23+
단순히 인스턴스만 생성했고 영속성 컨텍스트나 DB와 전혀 관련이 없는 상태
24+
```java
25+
Member member = new Member();
26+
member.setId("member1");
27+
member.setUsername("회원1");
28+
```
29+
30+
2. 영속<br>
31+
엔티티 매니저를 통해 영속성 컨텍스트에 저장된 상태<br>
32+
영속성 컨텍스트의 관리 아래에 놓이게 된다.
33+
```java
34+
@Autowired EntityManager em;
35+
em.persist(member);
36+
```
37+
38+
3. 준영속<br>
39+
영속 상태였던 엔티티가 영속성 컨텍스트의 관리를 받지 않게 된 상태
40+
```java
41+
em.detach(member);
42+
```
43+
44+
4. 삭제<br>
45+
삭제가 삭제지 뭐야...
46+
```java
47+
em.remove(member);
48+
```
49+
50+
### 특징
51+
52+
1. 영속성 컨텍스트 내에서는 엔티티를 식별자 값으로 구분하기 때문에 식별자 값이 반드시 있어야 한다.
53+
2. 영속성 컨텍스트의 데이터를 DB에 저장(반영)하는 것을 flush라고 한다.
54+
- em.flush()로 직접 flush
55+
- 트랜잭션 커밋 시
56+
- JPQL 쿼리 실행 시
57+
3. 영속성 컨텍스트의 장점
58+
- 1차 캐시
59+
- 동일성 보장
60+
- 트랜잭션 쓰기 지연
61+
- 변경 감지
62+
- 지연 로딩
63+
64+
## CRUD에서의 영속성 컨텍스트
65+
create : 1차 캐시에 저장하면서 쓰기 지연 SQL 저장소에 insert sql을 쌓아뒀다가 커밋할 때 한번에 sql문을 날려 DB에 반영<br>
66+
read : 1차 캐시에서 조회해보고 없으면 DB에서 조회해서 1차 캐시에 저장<br>
67+
update : 1차 캐시에 저장된 엔티티 값을 수정하면 해당 엔티티의 변경사항을 DB와 비교하여 자동으로 반영(변경 감지)<br>
68+
delete : 엔티티 삭제 후 delete sql을 쌓아뒀다가 DB에 반영<br>
69+
70+
## 준영속
71+
영속->준영속으로 바꾸는 세 가지 방법
72+
1. em.detach(entity)
73+
2. em.clear()
74+
3. em.close()
75+
76+
주로 영속성 컨텍스트가 종료되면서 준영속 상태가 되고, 개발자가 직접 준영속 상태로 만드는 일은 드물다.<br>
77+
준영속 상태의 엔티티는 지연 로딩이 불가능하다.<br>
78+
<br>
79+
준영속(&비영속)->영속으로 바꾸는 방법
80+
- em.merge(entity)

0 commit comments

Comments
 (0)