일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- findTopBy
- Stream
- 백명석님
- intellij favorites
- aws
- 마이크로 서비스
- Spring Cloud Netflix
- javascript case
- vue.js
- JPA
- git
- multipart테스트
- 자바 ORM 표준 JPA 프로그래밍 정리
- ksqldb
- ksql
- HandlerMethodArgumentResolver
- @Transactional Propagation
- 원격 브랜 삭제
- intellij 즐겨찾기
- 리눅스
- CompletableFuture
- IntelliJ
- 리팩토링 2판
- intellij 핵심 단축키
- Linux
- @TransactionalEventListener
- 친절한 SQL 튜닝
- #docker compose
- 자바 ORM 표준 JPA 프로그래밍
- java
- Today
- Total
시그마 삽질==six 시그마
JPA -Persistence Management 본문
우아한 형제들의 김영한 팀장님의 '자바 ORM 표준 JPA 프로그래밍'을
구입하시길 강력 추천드립니다.
책 구입을 원하시는분은 요기를 클릭하시면 됩니다.
저자 직강 인프런 강의도 있습니다 궁금하신분은 요기를 클릭
하단의 내용은 제가 예전에 읽었던 내용을 요약 정리한 것입니다.
-엔티티 매니져는 DB 연결이 트랜잭션 시작시 커넥션 획득
-영속성 컨텍스트(persistence context): 엔티티를 영구 저장하는 환경
-엔티티 생명주기
1. 비영속 : pc와 관계 x
2. 영속 : pc에 저장되어 pc가 관리하는 상태 (em.persist(), em.find(), JPQL 조회)
3. 준영속: pc저장됬다 분리(식별자 보유, 지연로딩 불가)
4. 삭제: pc에서 삭제
-영속성 컨텍스트 특징
1. 식별자값이 반드시 있다.
2. tx 커밋시에야 DB에 flush하여 저장(flush는 pc의 변경내용을 DB에 반영하는 작업임)
3. pc가 entity관리시 장점
1) 1차 캐시:
pc내부에 캐시를 1차캐시라함.
Map으로 관리(key는 식별자,값은 엔티티 인스턴스).
find호출시 1차캐시에 없으면 DB조회->엔티티생성 ->1차캐시 저장->영속상태 Entity 반환
2) 동일성 보장: 두 find 사이에 변경된게 없다면 1차 캐시 동일 Entity 반환하여 동일성 보장
3) 쓰기 지연: tx 커밋직전까지 쓰기지연 SQL 저장소에 모아둔 CUD 쿼리를 커밋시에 DB에 보내는데 이걸 쓰기 지연이라함
4) 변경 감지:
pc에 저장된 기존 스냅샷과 현재 Entity비교, Entity 변경사항 DB에 자동반영
pc가 관리하는 영속상태의 Entity만 해당
모든 필드 update(but, @org.hibernate.annotation.DynamicUpdate 사용시 동적으로 update 가능)
5)지연 로딩
-플러시
1. Flush: pc의 변경내용을 DB에 반영하는 작업
2.Flush 하는 방법3가지
1) em.flush() 호출
2) tx commit 시 자동호출
3) JPQL 쿼리 실행시 default flush 됨(if 자동호출 안된다면, em.persist(멤버A) 후 바로 JPQL로 멤버모두조회위해 find 사용시 멤버A는 조회결과에없음)
JPA default가 FlushModeType.AUTO다(커밋이나 쿼리를 실행할때 플러시(기본값)
PC에 저장(persist,find,jpql)-->DB에 저장(flush,commit,jpql)
'프로그래밍 > JPA' 카테고리의 다른 글
JPA -다양한 연관관계 매핑 (0) | 2020.04.09 |
---|---|
JPA -연관관계 매핑 (1) | 2020.04.08 |
JPA -Entity Mapping (0) | 2020.04.08 |
JPA-Flow (0) | 2020.04.08 |
JPA -Introduction (0) | 2020.03.30 |