Written by
Poogle
on
on
2021.09.28 TIL
새롭게 배운 것 Done
- Spring Frameworks - RDB 접근
- JDBC: 자바 어플리케이션은 JDBC API를 이용하여 데이터계층과 통신
JPA를 사용해야하는 이유
- 생산성 증진
- SQL에 의존적인 개발에서 탈피하여, 객체중심으로 생산적인 개발이 가능하다.
- 객체와 관계형테이블의 패러다임 불일치
- 객체지향 프로그래밍은 추상화, 캡슐화, 상속, 다형성 등을 제공한다.
- 관계형 데이터베이스 데이터 중심으로 구조화 되어있으며, OOP의 특징을 지원하지 않는다.
EntityManager
- EntityManagerFactory: Entity 관리하는 EntityManager를 생산하는 공장
- Thread Safe
- EntityManager: Entity를 저장, 수정, 삭제, 조회 등 Enity와 관련된 모든 일을 처리
- Thread Safe하지 않음, 여러 thread에서 동시에 접근할 경우 동시성 이슈가 발생할 수 있음
- 트랜잭션을 시작할 때, 커넥션 획득
영속성 컨텍스트
- 엔티티를 영구 저장하는 환경
- 영속성 컨텍스트와 식별자 값
- 영속성 컨텍스트 안에서 관리되는 엔티티는 식별자 값을 반드시 가져야 함
- key-value로 엔티티 관리
- 영속성 컨텍스트와 데이터베이스 저장
- JPA는 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 DB에 반영 (FLUSH)
- 플러시(FLUSH)는 영속성 컨텍스트의 변경 내용을 DB에 동기화하는 작업, 이 때 등록, 수정, 삭제한 엔티티를 DB에 반영
- 영속성 컨텍스트가 엔티티를 관리함으로 얻는 이점
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지
- 지연 로딩
엔티티 생명주기
영속
persist()
: 영속성 컨텍스트에서 관리
준영속
detach(entity)
: 영속상태의 엔티티(객체)를 영속성 컨텍스트에서 분리clear()
: 영속상태의 모든 객체를 영속성 컨텍스트에서 분리close()
: 영속성 컨텍스트 종료
삭제
remove(entity)
: 영속성 컨텍스트에서 분리하고 DB에서도 삭제