Time does not change us. It just unfolds us.

Web/JPA

[JPA]JPQL(Java Persistence Query Language)

소젬 2021. 11. 22. 18:05

JPA를 공부하면서 JPA는 SQL을 추상화한 JPQL이라는 객체지향 쿼리 언어를 제공한다는 것을 알게 되었다.

JPA은 table 대상인 SQL과 달리 Entity 객체를 중심으로 개발하므로 Entity 대상으로 Query를 작성​한다고 한다. 

 

JPQL과 SQL 차이점

  • JPQL은 엔티티 객체를 대상으로 쿼리한다.
  • SQL은 데이터베이스 테이블을 대상으로 쿼리한다.

 

그 외 특징들

  • 엔티티 객체를 조회하는 객체지향 쿼리
  • SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음
  • JPA는 JPQL을 분석한 후 적절한 SQL을 만들어 데이터베이스를 조회
  • 방언(Dialect)만 변경하면 JPQL을 수정하지 않고 자연스럽게 DB 변경 가능
  • JPQL 문법의 전체 구조는 SQL과 유사

 

아래와 같이 Entity 이름과 Entity 객체의 필드명으로 작성한다.

회원 Entity
JPQL

 

select

 


내가 사용한 Repository의 select문

public List<Item> findAll() {
	/*TypedQuery<Item> query =  entityManager.createQuery("select i from Item i", Item.class);
	List<Item> items = query.getResultList();*/

	return entityManager.createQuery("select i from Item i", Item.class)
		.getResultList();
}

반환 타입을 알 경우 TypedQuery를 사용할 수 있다. (주석과 return 내용은 같음)

  • query.getResultList()
  • 결과가 없으면 빈 컬렉션 반환
  • query.getSingleResult()
  • 결과가 정확히 하나일 때 사용.
  • 결과가 없으면 예외 발생 : NoResultException
    • 1개보다 많으면 : NonUniqueResultException
    • 주의 필요.

 

더 많은 문법에 대한 설명은 JPA 책 요약 참고

https://ultrakain.gitbooks.io/jpa/content/chapter10/chapter10.2.html

 

10.2 JPQL · jpa

 

ultrakain.gitbooks.io

 

그 외 설명 참고 

https://data-make.tistory.com/614

 

[JPA] JPQL Query 정리

| JPQL(Java Persistence Query Language) - 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리 - SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음 - JPA는 JPQL을 분석한 후 적절한 SQL을..

data-make.tistory.com

 

'Web > JPA' 카테고리의 다른 글

[JPA]객체지향 쿼리  (0) 2021.11.25
[JPA]Transcation, 영속성Context, EntityManager  (0) 2021.11.23
[JPA]JUnit단위 Test 관련 정리  (0) 2021.11.23
[JPA]Annotation 정리  (0) 2021.11.18