JPA/JPQL

[JPQL] 타입 표현과 기타식, 조건식(CASE 등등), 기타 함수

yoon_seon 2023. 4. 25. 21:45

📌 JPQL 타입 표현과 기타식

  • 문자 : 'HELLO', 'She"s'
  • 숫자: 10L(Long), 10D(Double), 10F(Float)
  • Boolean: TRUE, FALSE
  • ENUM: jpql.MemberType.Admin(패키지명 포함)
select m.username, 'HELLO', true from Member m 
 where m.type = jpql.MemberType.ADMIN
 
 
// 파라미터 바인딩 경우
String query = "select m.username, 'HELLO', true from Member m " +
		        "where m.type = :userType";
List<Object[]> result = em.createQuery(query)
		.setParameter("userType",MemberType.ADMIN)
		.getResultList();
  • 엔티티 타입: TYPE(m) = Member(상속 관계에서 사용)
em.createQuery("select i from Item i where type(i) = Book", Item.class);

 

JPQL 기타

  • SQL과 문법이 같은 식
  • EXISTS, IN
  • AND, OR, NOT
  • =, >, >=, <, <=, <>
  • BETWEEN, LIKE, IS NULL

 

📌 조건식(CASE 등등)

기본 CASE 식

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

단순 CASE 식

select case t.name
            when '팀A' then '인센티브 110%'
            when '팀B' then '인센티브 120%'
            else '인센티브 105%'
       end
from Team t
  • COALESCE: 하나씩 조회해서 null이 아니면 반환
select coalesce(m.username, '이름 없는 회원') from Member m;
  • NULLIF: 두 값이 같으면 null 반환, 다르면 첫번째 값 반환
select NULLIF(m.username, '관리자') from Member ;

 

📌 JPQL 함수

  • CONCAT
  • SUBSTRING
  • TRIM
  • LOWER,UPPER
  • LENGTH
  • LOCATE
  • ABS, SQRT, MOD
  • SIZE, INDEX(JPA 용도)
//- SIZE, INDEX(JPA용도)
select SIZE(t.members) from Team t // Team 컬렉션 사이즈, 인덱스 반환

 

사용자 정의 함수 호출

  • 하이버네이트는 사용전 방언에 추가해야 한다.
    • 사용하는 DB방언을 상속받고, 사용자 정의 함수를 등록한다. 실제 소스코드내부에 정의되있는 함수들을 참고해서 작성해주면 된다.
//group_concat 이라는 funtion을 등록한다고 가정
public class MyPostgresDialect extends PostgreSQL94Dialect {
    public MyPostgresDialect() {
        registerFunction("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING));
    }
}

persistence.xml 수정

//설정파일 등록
<property name="hibernate.dialect" value="jpql.MyPostgresDialect"/>

 

 

 


해당 글은 인프런의 [자바 ORM 표준 JPA 프로그래밍 - 기본편] 강의를 정리한 내용입니다.

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com