File tree 1 file changed +80
-0
lines changed
1 file changed +80
-0
lines changed Original file line number Diff line number Diff line change
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)
You can’t perform that action at this time.
0 commit comments