#jpa 더티체킹
Dirty란 상태의 변화가 생긴 것.
즉, Dirty Checking이란 상태 변경 검사 이다.
JPA에서는 트랜잭션이 끝나는 시점에 변화가 있는 모든 엔티티 객체를 데이터베이스에 자동으로 반영.
●더티 체킹(Dirty Checking)이란?
JPA는 엔티티 매니저가 엔티티를 저장/조회/수정/삭제를 합니다.
그런데 엔티티 매니저의 메서드를 찾아보면, 저장(persist)/조회(find)/수정(?)/삭제(delete)로 수정에 해당하는 메서드가 없습니다.
대신에 수정(?)에 해당하는 더티 체킹(Dirty Checking)을 지원합니다.
더티 체킹은 Transaction 안에서 엔티티의 변경이 일어나면, 변경 내용을 자동으로 데이터베이스에 반영하는 JPA 특징입니다.
*데이터베이스에 변경 데이터를 저장하는 시점 : 1) Transaction commit 시점 2) EntityManager flush 시점 3) JPQL 사용 시점 또한, 영속성 컨택스트(Persistence Context) 안에 있는 엔티티를 대상으로 더티 체킹이 일어납니다.
여기서 Dirty란 "엔티티 데이터의 변경된 부분"으로 해석하시면 됩니다. 즉, 변경된 부분을 체크해서 DB에 반영한다는 뜻으로 해석합니다.
@Transactional를 사용한 경우
1. Table: User에서 PK id가 2인 user 엔티티 객체 조회
2. user의 email을 hello@gmail.com로 수정 (Dirty Checking 발동)
3. hello@gmail.com를 email로 가진 user 엔티티 유무 확인, 2번 과정에서 수정되었기에 true 출력
@Transactional를 사용하지 않은 경우
1. Table: User에서 PK id가 2인 user 엔티티 객체 조회
2. user의 email을 hello@gmail.com로 수정
3. hello@gmail.com를 email로 가진 user 엔티티 유무 확인,
2번 과정에서 수정되지 못해서 false 출력
Transaction을 사용하지 않아서 반영되지 못한 내용을 반영하고 싶은 경우, 원하는 시점에 save, saveAndFlush를 사용합니다.
출처 : https://interconnection.tistory.com/121
#sql 조인
join / left outer join / right outer join
SQL 기본 문법: JOIN(INNER, OUTER, CROSS, SELF JOIN)
하나의 테이블에 원하는 데이터가 모두 있다면 참 좋겠지만, 두 개의 테이블을 엮어야 원하는 결과가 나오는 경우도 많습니다. 조인을 쓰면 두 개의 테이블을 엮어서 원하는 데이터를 추출할 수 있습니다.
두 테이블의 조인을 위해서는 기본키(PRIMARY KEY, PK)와 외래키(FOREIGN KEY, FK) 관계로 맺어져야 하고, 이를 일대다 관계라고 합니다. INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN에 대해 간단히 알아보겠습니다.
📌JOIN 5줄 요약
조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다.
INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.
OUTER JOIN(외부 조인)은 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다.
CROSS JOIN(상호 조인)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다.
SELF JOIN(자체 조인)은 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다.
출처 : https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/
더티 체킹의 경우는 솔직히 지금은 이해가 잘 가지 않는다. 앞으로 더 깊이 있는 공부를 진행해서 꼭 이해할 것
'TIL' 카테고리의 다른 글
TIL 221001 개인프로젝트 SQL 쿼리 (0) | 2022.10.01 |
---|---|
220930 TIL 개인프로젝트 SQL쿼리 입문 (1) | 2022.09.30 |
TIL 220928 (0) | 2022.09.29 |
TIL 220927 (2) | 2022.09.27 |
220926 TIL 개인프로젝트 mysql 쿼리 입문 (2) | 2022.09.26 |