JPA의 중요점은 2가지가 있다.
1. JPA는 객체와 관계형 데이터베이스를 매핑한다 (ORM - Object Relational Mapping)
2. 영속성 컨텍스트
영속성 컨텍스트
영속성 컨텍스트란 Entity를 영구적으로 저장하는 환경이다,
1. 영속성 컨텍스트는 논리적인 개념이다.
2. EntityManager를 통해서 영속성 컨텍스트에 접근 할 수 있다.
em.persist(member);
위 코드는 데이터베이스에 member를 저장하는것이 아니다.
member 객체를 영속성 컨텍스트에 저장하는 코드이다.
Entity의 생명주기
Member member = new Member(); // 비영속
em.persist(member); // 영속
em.detach(member); // 준영속
em.remove(member); // 삭제
비영속 - 객체를 생성한 상태
영속 - 객체를 저장한 상태 -> 영속성 컨텍스트의 1차캐시에 저장한다,
준영속 - datach를 통해 영속상태에서 분리된 상태
삭제 - 영속성 컨텍스트에서 삭제된 상태
Entity 수정하기
commit 시점에서 flush가 발생하는데,
이때 1차 캐시에서 엔티티와 스냅샷(최초시점)을 비교해서 변경 사항에 대한 업데이트 쿼리를 쓰기지연 SQL 저장소에 저장한다,
그리고 이후에 쓰기지연 SQL 저장소에 쿼리를 DB에 전송한다.
즉 flush가 발생하면
1. 변경사항을 감지한다.
2. 수정된 Entity의 정보를 쓰기지연 SQL 저장소에 등록한다.
3. 해당 쿼리를 DB에 전송한다.
이때 1차캐시를 비우는것은 아니다. 변경사항을 DB에 등록해줄 뿐이다.
flush() 호출 방법
1. em.flush()를 통해 직접 호출
2. transaction의 commit - commit을 할때 자동으로 flush가 호출된다.
3. JPQL 쿼리 작성 - JPQL을 사용할때 자동으로 flush가 호출된다.
'Java , Spring > Jpa' 카테고리의 다른 글
[JPA] 상속관계 매핑 (0) | 2023.11.01 |
---|---|
[JPA] 연관관계 (0) | 2023.10.08 |
[JPA] 엔티티 매핑 (0) | 2023.10.06 |
[JPA] JPA 시작하기 (0) | 2023.10.03 |
Entity, DTO, DAO (0) | 2023.08.20 |
댓글