Jpa ORM 표준 강좌 #2

ims·2020년 10월 20일

JPA 프로그래밍

목록 보기
3/6
post-thumbnail

영속성 콘텍스트

엔티티를 영구 저장하는 환경

EntityManger.persist(entity)

-> DB에 저장한다는 의미가 아니라 영속성 컨텍스트를 통해서 entity를 영속한다는 뜻

: application과 database 사이의 중간 계층이 있는 개념.

영속적이다 -> 그 사이 공간에 올라간 것
비영속적 -> 사이 공간에 올라가지 않은 것

1차 캐시

DB에서는 값을 조회하면 영속성 콘텍스트 1차캐시에 값을 올려놓는다.

Application < - JPA -> Database

App에서 data를 가져올 때 Jpa 안의 1차 캐시에서 값을 조회해보고 있으면 그 1차캐시 안의 값을 가져온다. 만약 값이 없다면 Jpa에서 db에서 값을 추출하고 그 후에 값을 App에 return한다.

그러나 Jpa는 db transaction 단위로 움직이기 때문에 transaction이 끝나면 캐시 역시 지워진다. 고로 효율성에 있어서는 그닥이다.

Commit

EntityManger.persist(entity)

persist에서 query를 날리는게 아니라 commit()에서 쿼리를 날린다.

EntityManagerFactory emf = Persistence.createEntityManagerFactory()
EntityManager em = emf.createEntityManager()
EntityTransaction tx = em.getTransaction()

...

EntityManger.persist(entity)
tx.commit()  <--- 이때 쿼리를 날린다

버퍼링 같은 개념으로 사용하는 것 ( 버퍼링을 모아서 write 가능 )

JPA의 목적

java collection 다루듯이 객체를 다루는 것

JPA는 값을 바꾸면 transaction이 commit 되는 시점에 변경을 반영한다.

pseudo code

Update entity
Call Entity Manager persist (x)
-> 알아서 변경된다

플러쉬

  • 변경감지

  • 수정된 엔티티 쓰기 지연 SQL 저장소 등록

  • 저장된 쿼리를 날림

영속성

1차 캐시에 올라간 상태 = 영속상태

em.persist를 통했을 때도 영속상태가 되지만, em.find를 통해서 영속성 콘텍스트에 올렸을 때도 영속상태가 된다.

준영속 상태

영속상태의 entity를 영속성 콘텍스트에서 분리하는 것 ( 그러면 영속성 콘텍스트가 제공하는 기능 사용못함 )

@Entity

  • @Entity가 붙은 것은 Jpa가 관리한다

  • 기본생성자 필수,final , enum, interface, inner 클래스 사용 x

profile
티스토리로 이사했습니다! https://imsfromseoul.tistory.com/ + https://camel-man-ims.tistory.com/

0개의 댓글