티스토리 뷰
영속성 컨텍스트 란?
entity를 영구 저장하는 환경입니다
EntityManager.persist(entity);
엔티티를 영속성 컨텍스트에 저장한다 (DB가 아님)
EntityManager를 통해서 영속성 컨텍스트에 접근합니다
스프링에서는 엔티티 매니저와 영속성 컨텍스트가 N:1
엔티티의 생명주기
- 비영속(new/transient)
영속성 컨텍스와 전혀 관계가 없는 새로운 상태입니다
- 영속(managed)
영속성 컨텍스트에 관리되는 상태입니다
- 준영속(detached)
영속성 컨텍스트에 저장되었다가 분리된 상태입니다
- 삭제(removed)
삭제된 상태입니다
EntityMaagerFactory emf = Persistence.createEntityManagerFactory("test");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
//객체를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setName("조이리");
//객체를 저장한 상태(영속)
em.persist(member);
//영속성 컨텍스트에서 분리, 준영속 상태
em.detach(member);
//객체를 상태한 상태(삭제)
em.remove(member);
영속성 컨텍스트의 이점
- 1차캐시
- key는 pk, value는 entity 입니다
- 영속성 컨텍스트의 1차캐시에서 가져오기때문에 쿼리가 발생하지 않습니다
- 한 트랜잭션에서 사용하기 때문에 성능상 큰 장점은 없습니다
- 순서
- 1차캐시에서 데이터를 찾습니다
- 1차 캐시에 없으면 디비에서 조회합니다
- 가져온 데이터를 1차캐시에 저장 하고 반환합니다
동일성(identity) 보장
- 반복가능한 일기(Reapeatable read) 등급의 트랜잭션 격리 수준을 데이터베이스가 아닌 어플리케이션 차원에서 제공합니다
트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
- 쓰기 지연 저장소에 저장하고 있다가 transaction.commit(); 커밋하는 순간 쿼리가 날아갑니다
변경 감지(dirty checking)
- em.find(entity)로 가져와 영속성 컨텍스트에 저장된 엔티티는 변경이 일어나면 자동으로 수정 됩니다
- 1차 캐시에 있는 스냅샷 필드와 비교하여 변경된 부분을 확인합니다
지연 로딩(lazy loading)
'Spring' 카테고리의 다른 글
[Spring] 트랜잭션(Transaction) 동작 원리 (0) | 2020.12.05 |
---|---|
[Spring] Jackson이란? (0) | 2020.11.23 |
[Spring] 트랜잭션(transaction)이란? (0) | 2020.11.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Today
- Yesterday
링크
TAG
- jdk11
- JMeter
- Serializable
- reactive
- observable
- object
- strategy
- Concurrecy
- 영속성
- template method
- Effective JAVA
- gslb
- Spring
- Design Pattern
- jvm
- Redis
- Observer Pattern
- 디자인패턴
- 부하테스트
- iterable
- reactive stream
- in-memory
- exception
- Serialize
- Java
- template
- 메인보드#asrock b650m #조립pc #후기이벤트
- nosql
- concurrency
- LAMBDA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함