일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 항해99솔직후기 #항해99 #부트캠프추천
- #내일배움단 #코딩프로젝트 #국비지원 #내일배움카드 #스파르타코딩클럽
- 스파르타코딩클럽 #크롤링 #스크래핑
- 스파르타코딩클럽 #코딩 #jQuery #Ajax
- 부트스트랩 #Bootstrap #웹개발첫걸음 #스파르타코딩클럽
- Today
- Total
이모저모
JPA - 영속성 컨텍스트 본문
JPA는 객체와 관계형 데이터베이스를 연결하는 Java의 표준 ORM.
JPA가 적용되는 웹 어플리케이션에는 1개의 EntityManagerFactory가 있고,
이로부터 각 요청에 따라 여러개의 EntityManager들이 생성된다.
J2EE, 스프링 프레임워크 같은 컨테이너 환경에서는 여러개의 EntityManager가 1개의 영속성 컨텍스트를 공유한다.
이때 영속성 컨텍스트란, 엔티티를 영구 저장하는 환경이다.
persist
이 영속성 컨텍스트에 귀속시키는(?) 코드모양 => EntityManager.persist(entity);
우리는 이런 모양의 코드를 작성함으로써 객체의 정보를 db에 저장할 수 있는데,
사실 영속성 컨텍스트에 객체를 두는 작업이 곧장 DB에 저장하는 것 자체는 아니다.
JPA는 사실 transaction이 commit되는 순간까지 기다리면서 저장해야 할 객체들을 보관해두고,
transaction.commit(); 되는 순간 DB에 insert sql 을 보낸다.
이렇게 잠정적으로 쿼리를 쌓아두는 '쓰기 지연 SQL 저장소'가 영속성 컨텍스트 내부에 존재한다.
flush
영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것.
다만 flush가 일어난다고 해서 1차캐시가 삭제나 reset되는 것은 아니다.
그런데 flush를 직접 호출하지 않아도, JPQL 쿼리 실행시 또는 commit시에 flush가 자동으로 호출된다.
(물론 FlushModeType.AUTO 가 default 여서 그렇고, commit시에만 flush 하고 싶다면 FlushModeType.COMMIT 으로 변경도 가능하지만 굳이 그렇지 않는 걸 권장 by 김영한님)
'coding > Java, Spring' 카테고리의 다른 글
JPA _ proxy, eager loading, lazyloading (0) | 2022.02.21 |
---|---|
JPA - Entity mapping, 연관관계의 주인 (0) | 2022.02.21 |
절차/객체/관점 지향 프로그래밍 (0) | 2022.02.21 |
request scope와 provider, proxy (0) | 2022.02.17 |
bean 등록시 자동/수동 선택 기준 (0) | 2022.02.17 |