JPA 프로그래밍 7. 쿼리 - KwangtaekJung/inflearn-spring-data-jpa-keesun GitHub Wiki
- Java Persistence Query Language / Hibernate Query Language
- 데이터베이스 테이블이 아닌, 엔티티 객체 모델 기반으로 쿼리 작성.
- JPA 또는 하이버네이트가 해당 쿼리를 SQL로 변환해서 실행함.
- https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#hql
@Override
public void run(ApplicationArguments args) throws Exception {
TypedQuery<Post> query = entityManager.createQuery("SELECT p FROM Post AS p", Post.class);
List<Post> posts = query.getResultList();
posts.forEach(System.out::println); // 주의: toString에서 comments를 제외시키지 않으면 lazy loading에 의해 comment 관련 쿼리도 발생한다.
}
@Entity
@Getter @Setter
@ToString(exclude = "comments")
public class Post {
select
post0_.id as id1_2_,
post0_.title as title2_2_
from
post post0_
- 타입 세이프 쿼리
- https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#criteria
- 타잎 세이프 하기는 하지만 너무 복잡하고 번잡하다. 실무에서는 사용하지 않을 것 같음.
- SQL 쿼리 실행하기
- https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#sql
List<Post> posts1 = entityManager.createNativeQuery("select * from Post", Post.class).getResultList();
posts1.forEach(System.out::println);