Spring Data JPA - Query
Spring Data JPA
백기선님의 강의인 Spring Data JPA 강의를 듣고 공부한 내용을 정리한 글
Query
EntityManager를 사용하여 DB에 접근해보자.
JPQL(HQL)
Java Persistence Query Language / Hibernate Query Language
데이터베이스 테이블이 아닌, 엔티티 객체 모델 기반으로 쿼리 작성.
JPA 또는 하이버네이트가 해당 쿼리를 SQL로 변환해서 실행함.
하이버네이트를 사용할 때는 반드시 어떤 쿼리를 날리는지 눈으로 확인해야한다.
그래야 하이버네이트가 내가 의도한대로 작동하는지 확인할 수 있기 때문이다.
val createQuery = entityManager.createQuery("SELECT p FROM Post AS p")
val resultList = createQuery.resultList
resultList.forEach{println(it)}
이 방법의 단점은 TypeSafe하지 않다는 점인데 아래의 Criteria를 사용하면 TypeSafe한 쿼리를 만들 수 있다.
CrierCriteriaia
val criteriaBuilder = entityManager.criteriaBuilder
val createQuery = criteriaBuilder.createQuery(Post::class.java)
val root = createQuery.from(Post::class.java)
createQuery.select(root)
val posts = entityManager.createQuery(createQuery).resultList
posts.forEach{ println(it) }
물론 Native Query 또한 만들 수 있다.
Native Query
// Native Query도 사용 가능
val posts = entityManager.createNativeQuery("Select * from Post", Post::class.java)
.resultList
posts.forEach{println(it)}
개인적으론 위 방법이 가장 깔끔한 것 같다.
SQL 쿼리를 EntityManager를 통해 직접 날려서 조회할 수 있다.
Reference
인프런 백기선님의 스프링 Data JPA