728x90
반응형
JPQL도 SELECT 문에 CASE 문을 사용할 수 있다.
JPQL 기본 CASE 식
String query = "select " +
" case when m.age <= 10 then '학생요금' " +
" when m.age >= 60 then '경로요금' " +
" else '일반요금' " +
" end " +
" from Member m";
단순 CASE 식
String query = "select " +
" case t.name " +
" when '팀A' then '인센티브110%' " +
" when '팀B' then '인센티브120%' " +
" else '인센티브105%' " +
" end " +
" from Team t";
JPQL CASE 예시)
JpaMain.java
Team team = new Team();
team.setName("teamA");
em.persist(team);
Member member = new Member();
member.setUsername("teamA");
member.setAge(10);
member.setTeam(team);
member.setType(MemberType.ADMIN);
em.persist(member);
em.flush();
em.clear();
String jpql =
"select " +
"case when m.age <= 10 then '학생요금'" +
" when m.age >= 60 then '경로요금'" +
" else '일반요금' " +
"end " +
"from Member m";
List<String> resultList = em.createQuery(jpql, String.class)
.getResultList();
for(String s : resultList) {
System.out.println("s = " + s);
}
CASE 외의 조건식
- COALESCE : 하나씩 조회해서 null이 아니면 반환
- NULLIF : 두 값이 같으면 null 반환, 다르면 첫번째 값 반환
사용자 이름이 없으면 이름 없는 회원을 반환
Team team = new Team();
team.setName("teamA");
em.persist(team);
Member member = new Member();
member.setUsername(null);
member.setAge(10);
member.setTeam(team);
member.setType(MemberType.ADMIN);
em.persist(member);
em.flush();
em.clear();
String jpql = "select coalesce(m.username, '이름 없는 회원') as username from Member m";
List<String> resultList = em.createQuery(jpql, String.class)
.getResultList();
for(String s : resultList) {
System.out.println("s = " + s);
}
사용자 이름이 '관리자'면 null을 반환하고, 나머지는 본인의 이름을 반환
Team team = new Team();
team.setName("teamA");
em.persist(team);
Member member = new Member();
member.setUsername("관리자");
member.setAge(10);
member.setTeam(team);
member.setType(MemberType.ADMIN);
em.persist(member);
em.flush();
em.clear();
// 주로 데이터를 숨길 때 사용
String jpql = "select nullif(m.username, '관리자') as username from Member m";
List<String> resultList = em.createQuery(jpql, String.class)
.getResultList();
for(String s : resultList) {
System.out.println("s = " + s);
}
728x90
반응형
'자바 > JPA' 카테고리의 다른 글
[JPA/Java] JPQL 경로 표현식 (0) | 2023.05.10 |
---|---|
[JPA/Java] JPQL 기본함수 및 사용자 정의 함수 호출 (0) | 2023.05.10 |
[JPA/Java] JPQL 타입 표현과 기타식 (0) | 2023.05.09 |
[JPA/Java] JPQL 서브쿼리 (0) | 2023.05.09 |
[JPA/Java] JPQL 조인(Join) (0) | 2023.05.09 |
댓글