자바 ORM 표준 JPA 프로그래밍 - 객체지향 쿼리 언어3

lacblueeun·2021년 1월 17일
0

springboot

목록 보기
16/17
post-thumbnail

1. 조인

조인할 때는 항상 fetch 를 조심해야한다.
inner 랑 outer는 생략 가능하다.

1-1 내부 조인 (공통된 두 행의 교차를 제공한다.)

1-2 외부 조인 (두 테이블의 모든 행을 제공한다.)

1-3 세타 조인

1-4 on절을 활용한 조인

  1. 조인 대상 필터링
  2. 연관관계 없는 엔티티 외부 조인

2. 서브쿼리

EXISTS : 서브쿼리에 결과가 존재하면 참
ALL : 모두 만족하면 참
ANY, SOME : 같은 의미, 조건을 하나라도 만족하면 참
IN : 서브쿼리의 결과 중 하나라도 같은 것이 있으면 참

FROM 절의 서브 쿼리는 현재 불가능하다.
조인으로 풀 수 있으면 풀어서 해결하거나 쿼리를 두번 실행한다.

3. 조건식 CASE 식

3-1 기본 CASE 식

"select "
"case when m.age <= 10 then '학생요금'" +
"case when m.age >= 65 then '경로요금'" +
" else '일반요금' " +
"end " +
from Member m

3-2 coalesce & nullif

coalesce : coalesce(m.name, 'something') m.name 의 값이 없으면 두번째 인자의 값을 반환한다.

nullif : nullif(m.name, 'admin') m.name 이 'admin' 이라면 null을 반환한다.

4. 벌크연산

쿼리 한 번으로 여러 테이블 로우 변경(엔티티) 한다.
excuteUpdate()의 결과는 영향받은 엔티티 수 반환한다.

4-1 벌크연산 정합성 문제

벌크연산은 영속성 컨텍스트는 반영하지 않고, 데이터베이스에만 반영하기 때문에 정합성 문제가 발생한다.

  1. 영속성 컨텍스트를 무시하고 데이터베이스에 반영한다.
  2. 벌크 연산 수행 후 영속성 컨텍스트 초기화 한다.
profile
Go for Frontend Developer 🧪

0개의 댓글