Skip to content

[JPA study 1주차 이채은]

chennie_lee edited this page Mar 27, 2024 · 2 revisions

1️⃣**@Id**

  • db table 과 entity 를 mapping 할때, pk 값 위에 사용하는 annotation
  • 따로 @Column 으로 지정을 하지않으면 camelcase → snake case 로 변경된 table 을 찾아서 mapping 해줌

@GeneratedValue

2️⃣ PersistenceContext 와 EntitiyManager

  • 구조:

    Untitled

  • 매커니즘

    EntityManegerFactory( interface 의 일환 ) → (make) → entity Manager

    EntityManegerFactory( interface 의 일환 ) → (make) → entity Manager

    • EntityManager 은 entity 에 대한 CRUD 작업을 수행하기 위한 메서드들을 제공하며 영속성 관리를 함
  • Persistence Context ( = 영속성 컨텍스트 )

    • entity 를 영속화시킨다 ( ⇒ entity 가 db 로 바로 가지 않고 entity를 임시로 저장하는 걸 영속화 라고 한다 )

    • N:1 관계로 많은 EntityManager 을 관리한다.

    • 영속성 컨텍스트 (⇒ 유사 임시저장소) 의 종류 2가지

      • transaction scope ( default )
        • transaction 이 완료되는 즉시 컨텍스트(임시저장소) 에 있던 entity 들이 db 로 flush !
      • extended scope
    • 사용방법

      Untitled

    ⇒ 영속성 컨텍스트를 사용하는 이유 :

    db 에 entity 를 바로 inject 하지 않는다

    따라서, 1. 성능향상( db load 줄임 ) 2. 데이터 일관성 향상 이라는 장점O

3️⃣ Transactional annotation

  • 트랜젝션의 정의

    • 더 이상 쪼갤 수 없는 최소의 연산

    • 다른 작업들과는 독립적으로 이루어지고, 다른 연산이 끼어들 수 없음

    • 자동으로 연산을 취소하고 원래대로 되돌림(=Rollback)

      → 성공 시, 결과를 반영

  • 트랜젝션의 장점

    • DB 에 들어가는 값들의 오류 필터링 가능
  • 사용

    • 주로 서비스 domain 개발할 때 사용
  • 패턴

    • 프록시 패턴임 ( = 코드를 감싸면서 추가적인 연산을 붙일 수 있도록 하는 패턴 ) → 시작과 끝 작업을 트랜젝션에 붙여서 사용한다.

      ⇒ 트랜젝션 AOP

  • 유의할 점 / 원칙

    • 같은 transaction 내에서라면 다양한 EntityManager 을 쓰더라도 한개의(=같은) 영속성 컨텍스트를 사용

    • 같은 EntityManager 을 쓰더라도 transcation 이 다르면 다른 영속성 컨텍스트를 사용하는 것임
  • transaction annotation 의 더 많은 option 들 존재 ( 이걸로 Lazy Load 문제 등 해결 가능 … etc )

    [@Transactional 어노테이션의 이해](https://kafcamus.tistory.com/30)

참고문헌

[[JPA] Persistence context(영속성 컨텍스트)와 EntityManager](https://colevelup.tistory.com/21)

Clone this wiki locally