본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다.
JPQL 타입 표현
- 문자: ‘HELLO’, ‘She’’s’
- 숫자: 10L(Long), 10D(Double), 10F(Float)
- Boolean: TRUE, FALSE
- ENUM: jpabook.MemberType.Admin (패키지명 포함)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Team team = new Team();
team.setName("teamA");
em.persist(team);
Member member = new Member();
member.setUsername("teamA");
member.setAge(10);
member.setType(MemberType.ADMIN);
member.changeTeam(team);
em.persist(member);
em.flush();
em.clear();
String query = "select m.username, 'Hello', true from Member m " +
"where m.type = jpql.MemberType.ADMIN";
List<Object[]> result = em.createQuery(query)
.getResultList();
for (Object[] objects : result) {
System.out.println("objects = " + objects[0]);
System.out.println("objects = " + objects[1]);
System.out.println("objects = " + objects[2]);
}
만약 ENUM을 하드코딩이 아닌 파라미터로 설정한다하면 패키지명이 불필요하다.
1
2
3
4
5
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 (상속 관계에서 사용)
1
2
em.createQuery("select i from Item i where type(i) = Book ",Item.class)
.getResultList();
JPQL 기타
기본적으로 표준 SQL은 다 지원한다고 보면 된다.
- SQL과 문법이 같은 식
- EXISTS, IN
- AND, OR, NOT
- =, >, >=, <, <=, <>
- BETWEEN, LIKE,
IS NULL