본문 바로가기

JPA/JPQL6

[JPQL] 다형성 쿼리, 엔티티 직접 사용, Named 쿼리, 벌크 연산 📌 다형성 쿼리 Album, Movie, Book이 Item을 상속받는 구조 설계. Type 조회 대상을 특정 자식으로 한정 ex. Item 중에 Book, Movie를 조회해라 [JPQL] select i from Item i where type(i) IN (Book, Movie) [SQL] select i from i where i.DTYPE IN ('B', 'M') TREAT(JPA 2.1) 자바 타입 캐스팅과 유사 상속구조에서 부모타입을 특정 자식타입으로 다룰 때 사용 FROM, WHERE, SELECT(Hibernate 지원) 사용 ex. 부모인 Item과 자식 Book이 있다. [JPQL] select i from Item i where treat(i as Book).auther = 'kim'.. 2023. 4. 26.
[JPQL] 경로 표현식, 페치 조인(N+1문제 해결) 📌 경로 표현식 .(점)을 찍어 객체 그래프를 탐색하는 것 select m.username → 상태 필드 from Member m join m.team t → 단일 값 연관 필드 join m.orders o → 컬렉션 값 연관 필드 where t.name ='팀A' 경로 표현식 용어 정리 상태 필드(state field) : 단순히 값을 저장하기 위한 필드 (ex: m.username) 연관 필드(association field) : 연관관계를 위한 필드 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team) 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션(ex: m.orders) 경로 표현식 특징 상태 필드(state fi.. 2023. 4. 26.
[JPQL] 타입 표현과 기타식, 조건식(CASE 등등), 기타 함수 📌 JPQL 타입 표현과 기타식 문자 : 'HELLO', 'She"s' 숫자: 10L(Long), 10D(Double), 10F(Float) Boolean: TRUE, FALSE ENUM: jpql.MemberType.Admin(패키지명 포함) select m.username, 'HELLO', true from Member m where m.type = jpql.MemberType.ADMIN // 파라미터 바인딩 경우 String query = "select m.username, 'HELLO', true from Member m " + "where m.type = :userType"; List result = em.createQuery(query) .setParameter("userType",Member.. 2023. 4. 25.
[JPQL] 페이징, 조인, 서브쿼리 📌 페이징 JPA는 페이징을 다음 두 API로 추상화 setFirstResult(int startPosition) : 조회 시작 위치(0부터 시작) setMaxResults(int maxResult) : 조회할 데이터 수 List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(1) // 0부터 .setMaxResults(10) // 10개씩 .getResultList(); 연결된 데이터베이스 별 SQL이 작성되기 때문에 매우 편리하다. 📌 조인 내부조인(Inner Join) SELECT m FROM Member m [INNER] JOIN m.team t 외부조인(Outer .. 2023. 4. 25.