티스토리 뷰

카테고리 없음

JPA 영속성 관리

tongnamuu 2021. 7. 19. 21:11

JPA에서 핵심 2가지

- ORM ( 개체와 관계형 데이터베이스 매핑)

- 영속성 컨텍스트

 

EntityManagerFactory는 요청이 올 때마다 EntityManager를 생성한다.

영속성 컨텍스트 : 엔티티를 영구 저장하는 환경

EntityManager.persist(entity);

엔티티 매니저를 통해 영속성 컨텍스트에 접근

 

엔티티의 생명주기

비영속(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 형태  - 새로운 객체 생성

영속(managed) 영속성 컨텍스트에 관리되는 상태 - em.persist(entity)

준영속(detached) 영속성 컨텍스트에 저장되었다가 분리된상태 - em.detach(entity)

삭제(removed) 삭제된 상태 - em.remove(entity)

 

하지만 em.persist(entity) 때 쿼리가 실행되는 것이 아니고

tx.commit(); 가 실행될 때 entityManager에 들어있던 entity의 쿼리가 실행된다.

 

영속성 컨텍스트의 장점

- 1차캐시

- 동일성 보장

- 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind)

- 변경 감지(Dirty Checking)

- 지연 로딩(Lazy Loading)

 

1차캐시 : 한 번의 트랜잭션 안에서만 효과가 있다, 전체 서비스에서 공유하는 캐시가 아님.

어떤 조회쿼리에서 하나의 트랜잭션에서 먼저 entityManager의 1차 캐시에서 찾아본 후 있으면 반환, 없으면 데이터베이스에서 결과를 받아와서 1차캐시에 저장후 반환한다.

 

동일성 보장 : 하나의 트랜잭션에서 같은 객체를 찾으면 둘은 같은 객체를 반환한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함