[JPA] JPQL - JPQL 타입 표현과 기타식
19 Aug 2022해당 포스트는 인프런 김영한님의 자바 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