TIL-06/15

choichoichoi·2023년 6월 15일
0

내일배움캠프

목록 보기
25/36

내일배움캠프 5주 4일차

INSERT나 UPDARE, DELETE와 같이 데이터를 변경하는 SQL을 데이터베이스에 요청 및 반영하기 위해서는 트랜잭션 환경이 필요하다.
-> SELECT는?? 상관이 없다. 데이터베이스의 데이터를 변경하는 게 아니고 그냥 조회하는 것이기 때문에 트랜잭션 환경이 필수는 아니다. 하지만 필요할 때가 있기는 하다.

영속성 컨텍스트가 가지고 있는 기능
1. 1차 캐시 기능 MAP 자료 구조로 되어있고 효율적으로 관리하고 있다.
2. 쓰기 지원 저장소. ActionQueue에 트랜잭션처럼, 데이터베이스의 트랜잭션처럼 Query를 담고 있다가 트랜잭션 commit하면서 한 번에 반영해준다.
3. Dirty Checking. 변경 감지. 최초 상태를 저장해놨다가 현재 상태와 비교를 해서 변경 내용이 있다면 updatequery를 발생.(트랜잭션 commit 호출이 되고 난 다음에)
JPA같은 경우 영속성 컨텍스트의 ENTITY를 딱 저장할 때 최초 상태를 저장한다. 그게 LOADEDSTATE이다.
ENTITY의 현재 상태인 ENTITYINSTANCE와 최초의 상태인 LOADEDSTATE 이 두 개를 비교한다. 비교했을 때 값이 다른 경우(=변경이됨) UPDATE SQL을 생성한 다음에 쓰기 지연 저장소에 저장을 함. 그리고 담겨있는 모든 쓰기 지연 저장소의 SQL을 데이터베이스에 요청한다. 마지막으로 데이터베이스 쪽에 트랜잭션이 COMMTI되면서 반영이 된다.
그래서 우리가 변경하고 싶은 데이터가 있다면 먼저 데이터를 조회한다. EM.FIND하면서 변경하고 싶은 해당 ENTITY 객체를 조회한 다음 SET메서드나 다른 방법을 사용해 값을 변경한다. 이 후에 다른 작업을 하지 않아도 그냥 트랜잭션이 COMMIT되면 자동으로 반영된다.

준영속 상태
detached. 영속성 컨텍스트에 의해 저장되어 관리되다가 분리된 상태를 의미.
준영속 상태로 만드는 방법이 총 3가지 있다.
1. detach method : ###특정 entity를 준영속 상태로 전환
2. clear method : 비우고 다시 사용가능
3. closec method : 완전히 종류
영속성 컨텍스트에 의해서 관리되고 있는 entity class를 수정했을 때 변경 감지가 이루어진다.(MANAGED상태일때만 변경감지,Dirty Checking이 진행된다.= 수정이 자동으로 이루어진다.)

0개의 댓글