1992world.log
로그인
1992world.log
로그인
JPA 1
파란상자
·
2024년 10월 24일
팔로우
0
JPA
Java
백엔드
0
엔티티 매니저팩토리와 엔티티 매니저
엔티티 매니저 팩토리
엔티티 매니저를 생성하는 역할을 가진 interface
한번 만드는데 많은 비용을 소모하기 떄문에 한개만 만들어서 애플리케이션 전체가 공유 하도록 한다.
여러 스레드가 동시에 접근해도 OK
엔티티 매니저
엔티티를 CRUD 등 엔티티와 관련된 모든일을 처리하는 엔티티 관리자이다.
여러 스레드가 동시에 접근하면 동시성 문제가 생기므로 팩토리에서 각각 생성하여 사용하도록 한다.
위 사진에서 보면 팩토리에서 매니저를 생성하고 매니저는 DB와 연결이 필요한 시점까지 연결 되지 않다가 트렉젝션을 시작할때 커넥션을 획득한다.
생명주기
엔티티에는 4가지 상태가 존재한다.
비영속(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태
영속(managed) : 영속성 컨텍스트에 저장된 상태
준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
삭제(removed) : 삭제된 상태
비영속(new / transient)
엔티티 객체를 생성했지만 아직 저장(Persist)이 안된 상태로 영속성 컨텍스트나 DB와 관련이 없는 상태이다.
영속(managed)
비영속 상태였던 엔티티를 영속성 컨텍스트에 저장(persist)한 상태
영속성 컨텍스트의 특징
1.엔티티 조회
영속성 컨텍스트 내부에는 캐시를 가지고 있는데 이것이 1차 캐시라고 한다.
모든 영속 상태의 엔티티는 1차 캐시에 저장된다.
find를 호출해 조회를 할 경우 DB에서 바로 조회하는 것이 아닌 1차캐시에서 조회를 하게 된다.
만약 1차 캐시에 없을 경우 DB에서 조회를 하여 조회된 엔티티를 1차 캐시에 저장후 반환하게 된다.
2.엔티티 등록
엔티티 매니저는 트랜젝션을 커밋하기 직전까지 데이터베이스에 저장하지 않고 내부 쿼리 저장소에 INSERT SQL을 차곡차곡 모와두었다가 트렌젝션을 커밋할 때 모와둔 쿼리를 DB에 보내는데 이것을
쓰기 지연
이라고 한다.
3. 엔티티 수정
변경감지 : 엔티티의 변경사항을 데이터베이스에 자동으로 반영하는 기능
1차캐시에는 스냅샷이라는 것이 있는데 엔티티의 최초상태를 복사해서 저장 해둔 것이다.
flush()를 호출하게 되면 엔티티와 스냅샷을 비교하여 변경된 엔티티를 찾는다.
변경된 엔티티가 있으면 수정 쿼리를 생성하여 쓰기지연 상태 SQL 저장소에 보낸다.
이후 저장소의 SQL을 DB로 보내여 반영한다.
변경감지는 영속성 컨텍스트가 관리하는 영속상태의 엔티티에만 적용된다.
플러시
플러시(flush())는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다.
준영속
엔티티가 영속성 컨텍스트에서 분리된 상태
준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다.
1.엔티티를 준영속 상태로 전환 : detach()
2.영속성 컨텍스트 초기화 : clear()
3.영속성 컨텍스트 종료 : close()
엔티티 매니저가 더이상 영속성 컨텍스트를 관리하지 않음
파란상자
프로그래머 생산중....
팔로우
이전 포스트
네이버 클라우드 문제
다음 포스트
네이버 클라우드1
0개의 댓글
댓글 작성