DEV ℧ Developer Diary

[JPA] JPQL - JPQL 타입 표현과 기타식

해당 포스트는 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 듣고 정리한 글입니다.

JPQL 타입 표현과 기타식

JPQL 타입 표현

  • 문자: ‘HELLO’, ‘She’’s’
  • 숫자: 10L(Long), 10D(Double), 10F(Float)
  • Boolean: TRUE, FALSE
  • ENUM: jpabook.MemberType.Admin (패키지명 포함)
  • 엔티티 타입: TYPE(m) = Member (상속 관계에서 사용)

예시

문자, 숫자, Boolean

문자와, 숫자, Boolean 타입을 컬럼에 넣어서 데이터를 조회해 보자.

String typeQuery = "select m.username, 'HELLO', 10L, TRUE from Member m";
List<Object[]> result = entityManager.createQuery(typeQuery)
        .getResultList();
/* select
        m.username,
        'HELLO',
        10L,
        TRUE
    from
        Member m */ select
            member0_.username as col_0_0_,
            'HELLO' as col_1_0_,
            10 as col_2_0_,
            true as col_3_0_
        from
            Member member0_

member : member
String : HELLO
Long : 10
Boolean : true

ENUM

이번엔 Enum 타입을 jpql로 표현 해보자. enum타입을 jpql에 넣어줄 때는 패키지명을 전부 포함해서 넣어줘야 한다.

Team team = new Team();
team.setName("teamA");
entityManager.persist(team);

Member member = new Member();
member.setUsername("member");
member.setAge(10);
member.setType(MemberType.USER);
member.setTeam(team);
entityManager.persist(member);

entityManager.flush();
entityManager.clear();

String typeQuery = "select m.username from Member m " +
                    "where m.type = com.dhaudgkr.jpa07.jpql02.domain.MemberType.USER";
List<Object[]> result = entityManager.createQuery(typeQuery)
        .getResultList();
/* select
        m.username
    from
        Member m
    where
        m.type = com.dhaudgkr.jpa07.jpql02.domain.MemberType.USER */ select
            member0_.username as col_0_0_
        from
            Member member0_
        where
            member0_.type='USER'

하지만 조건문으로 들어간다면 jpql에 패키지명을 전부 적지 않고 파라미터로 넣어줄 수 있다.

String typeQuery = "select m.username from Member m " +
                    "where m.type = :userType";
List<Object[]> result = entityManager.createQuery(typeQuery)
        .setParameter("userType", MemberType.USER)
        .getResultList();

Entity

위와 같은 경우는 17. [JPA] 고급매핑 과 같은 경우에 사용 할 수 있다. Dtype을 통해 엔티티를 상속 받을 경우

String typeQuery = "select i from Item i where type(i) = Book"
List<Object[]> result = entityManager.createQuery(typeQuery)
        .getResultList();

위의 쿼리와 같이 Item을 상속받는 엔티티가 Book Entity와 같은지 에대해 조건을 걸 수있다.

JPQL 기타 표현식

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