- JPQL에서 가능한 문구
- SELECT , UPDATE , DELETE 문을 사용 가능하다
EntityManager.persist()
메서드를 사용하므로, JPQL 자체에는 INSERT 문이 존재하지 않습니다
SELECT 문
SELECT m FROM Member AS m WHERE m.username = 'Hello'
- 문법의 특징
- 대소문자의 구분
- 엔티티 이름과 속성(필드) 이름은 대소문자를 구분
Member
,username
- JPQL 키워드
SELECT
FROM
AS
은 구분 X
- 엔티티 이름과 속성(필드) 이름은 대소문자를 구분
- 엔티티의 이름
- JPQL 의 엔티티 이름은 클래스명이 아니며
- @Entity(name="XXX") 로 지정된 엔티티 이름으로 사용
- 별칭의 필수성
- JPQL 은
AS
키워드를 사용하여 별칭을 지정함
- 별칭은 필수
- JPQL 은
- UPDATE 와 DELETE 문은 벌크 연산을 한다
- 한번에 많은 수의 레코드를 업데이트하거나 삭제할 떄 사용함
- 대소문자의 구분
TypedQuery , Query
- JPQL 을 수행하기 위하여 쿼리 객체가 필요하다.
TypedQuery
와Query
두 가지 타입의 쿼리 객체를 제공함
- TypedQuery
- 반환할 타입이 명확한 경우 사용
- 모든 회원의 엔티티 조회의 케이스
TypedQuery<Member> query = em.createQuery("SELECT m FROM Member m", Member.class); List<Member> resultList = query.getResultList(); for (Member member : resultList) { System.out.println("member = " + member); }
member = Member(id=1, name=other, address=null, favoriteFoods=[], addressHistory=[]) member = Member(id=2, name=null, address=null, favoriteFoods=[], addressHistory=[])
- Query 사용
- 반환 타입이 명확하지 않는 경우
Query
객체를 사용
- 여러 타입의 컬럼 조회, 반환되는 객체의 타입이 미리 정해지지 않은 경우에 해당
Query query = em.createQuery("SELECT m.username, m.age FROM Member m"); List resultList = query.getResultList(); for (Object o : resultList) { Object[] result = (Object[]) o; // 결과가 둘 이상이면 Object[] 반환 System.out.println("username = " + result[0]); System.out.println("age = " + result[1]); }
- 반환 타입이 명확하지 않는 경우
- 결과 조회 메서드
getResultList()
- 결과를 리스트로 반환
- 결과가 없으면 빈 리스트로
getSingleResult()
- 결과가 정확히 하나인 경우
- 결과가 없거나 하나 이상인 경우 예외 발생
- 결과 X
- javax.persistence.NoResultException
- 하나 이상인 경우
- javax.persistence.NonUniqueResultException
- 결과 X
하나 이상일 수 있는 경우 예외처리를 해야합니다.
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] 객체지향 쿼리 (0) | 2023.11.09 |
---|---|
[JPA] JPQL 소개 (0) | 2023.11.09 |
[JPA] JPQL 파라미터 바인딩 (0) | 2023.11.09 |
[JPA] 프로젝션 (0) | 2023.11.09 |
[JPA] 페이징 API (0) | 2023.11.09 |