🔗
JOIN(조인)이란?
- JPQL의
JOIN은 엔티티 간의 관계를 연결/필터링(ON) 하는 기능- Hibernate 5.1 이상 → 연관관계 없는 엔티티도
JOIN가능
📌 JOIN ON (연관관계 없는 엔티티 조인)
String query = "select t from Tutor t left join Subject s on t.name = s.name";
List<Tutor> tutorList = em.createQuery(query, Tutor.class).getResultList();
Tutor와 Subject는 직접적인 관계 없음ON 조건으로 조인 가능✅ 특징
JOIN 문법 지원🧮 CASE (조건식)이란?
- 조건에 따라 다른 값을 반환하는 표현식
- SQL
CASE구문과 유사
💡 추가 함수
COALESCE(a, b) → a가 null 아니면 a, null이면 b 반환NULLIF(a, b) → a=b면 null, 다르면 a 반환📌 조건식 CASE 예시
String query =
"select case when t.age < 10 then '어린이' " +
"when t.age >= 80 then '노약자' " +
"else '청년' end " +
"from Tutor t";
List<String> resultList = em.createQuery(query, String.class).getResultList();
✅ 특징
"어린이", "노약자", "청년" 분류🛠️ 함수 (Functions)란?
- JPQL은 SQL과 유사하게 문자열/숫자/날짜 등 다양한 내장 함수 제공
- 💡 사용자 정의 함수도 등록 가능
🔡 문자열 함수
CONCAT('a','b') → 문자열 합치기SUBSTRING('abcde',2,3) → 2번째부터 3글자 "bcd"TRIM(' a ') → 앞뒤 공백 제거 "a"LOWER('A'), UPPER('a') → 소문자/대문자 변환LENGTH('abc') → 문자열 길이 반환🔢 숫자/컬렉션 함수
ABS(-100) → 절대값 = 100MOD(100, 2) → 나머지 = 0SIZE(t.company) → 연관된 컬렉션 크기📄 예시 코드:
String concatQuery = "select concat(t.name, ' is good') from Tutor t";
String substringQuery = "select substring(t.name, 2, 3) from Tutor t";
String trimQuery = "select trim(t.name) from Tutor t";
String upperQuery = "select upper(t.name) from Tutor t";
String lengthQuery = "select length(t.name) from Tutor t";
✅ 실행 결과
"wonuk is good""onu""wonukgap" (공백 제거)"WONUK" (대문자 변환)5 (길이)🧠 요약 정리
| 구분 | 핵심 내용 | 예시 |
|---|---|---|
| JOIN (ON) | Hibernate 5.1+ → 연관관계 없는 엔티티도 JOIN 가능 | select t from Tutor t left join Subject s on t.name = s.name |
| CASE | 조건에 따라 다른 값 반환 (SQL CASE와 동일) | case when t.age < 10 then '어린이' when t.age >= 80 then '노약자' else '청년' end |
| COALESCE | null이면 대체값 반환 | coalesce(t.name, '이름없음') |
| NULLIF | 두 값이 같으면 null, 다르면 첫 값 반환 | nullif(t.name, 'guest') |
| 문자열 함수 | concat(문자열 합치기), substring(부분 문자열), trim(공백 제거), lower/upper(대소문자 변환), length(문자열 길이) | select concat(t.name, ' hi') from Tutor t |
| 숫자 함수 | abs(절대값), mod(나머지 계산) | select mod(100, 2) from Tutor t |
| 컬렉션 함수 | size(컬렉션) → 연관된 컬렉션 크기 반환 | select size(t.company) from Tutor t |