-
Notifications
You must be signed in to change notification settings - Fork 4
[JPA study 1주차 이채은]
1️⃣**@Id**
- db table 과 entity 를 mapping 할때, pk 값 위에 사용하는 annotation
- 따로 @Column 으로 지정을 하지않으면 camelcase → snake case 로 변경된 table 을 찾아서 mapping 해줌
@GeneratedValue
-
pk 외의 식별자로 사용되는 값들을 자동으로 injection 시켜주는 annotation
-
strategy 를 [GeneratedType.AUTO](http://GeneratedType.AUTO) 로 설정할 시 하이버네이트가 자동으로 전략을 선택해서 사용함 ( identity, sequence, table 중 1개. dafault 는 table)
→ 의도대로 프로그램을 만들고 싶다면, 전략을 설정해주기
strategy = GenerationType.전략명
-
전략별 특징 참고
[JPA 기본키 생성 전략, @GeneratedValue 사용시 주의점](https://devcamus.tistory.com/16)
-
JPA + MySql(가장 흔함) 을 사용할 때는 Identity type 을 사용하자
-
2️⃣ PersistenceContext 와 EntitiyManager
-
구조:
-
매커니즘
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
- transaction scope ( default )
-
사용방법
⇒ 영속성 컨텍스트를 사용하는 이유 :
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 )
참고문헌
[[JPA] Persistence context(영속성 컨텍스트)와 EntityManager](https://colevelup.tistory.com/21)
Welcome to the 2024-1-JPA-Study wiki!