Spring/JPA/Hibernate32 JPQL - 벌크 연산 벌크 연산 주의 벌크 연산은 영속성 컨텍스트를 무시하고 데이터베이스에 직접 쿼리 벌크 연산을 먼저 실행 벌크 연산 수행 후 영속성 컨텍스트 초기화 Reference 자바 ORM 표준 JPA 프로그래밍 2021. 5. 31. JPQL - Named 쿼리 Named 쿼리 - 정적 쿼리(Spring Data JPA에서는 @Query로 해결) 미리 정의해서 이름을 부여해두고 사용하는 JPQL 정적 쿼리 어노테이션, XML에 정의 애플리케이션 로딩 시점에 초기화 후 재사용 애플리케이션 로딩 시점에 쿼리를 검증 Named 쿼리 환경에 따른 설정 XML이 항상 우선권을 가진다. 애플리케이션 운영 환경에 따라 다른 XML을 배포할 수 있다. Reference 자바 ORM 표준 JPA 프로그래밍 2021. 5. 30. JPQL - 엔티티 직접 사용 엔티티 직접 사용 - 기본 키 값 JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용 [JPQL] select count(m.id) from Member m // 엔티티의 아이디를 사용 select count(m) from Member m // 엔티티를 직접 사용 [SQL] (JPQL 둘다 같은 SQL 실행) select count(m.id) as cnt from Member m Reference 자바 ORM 표준 JPA 프로그래밍 2021. 5. 29. JPQL - 다형성 쿼리 TYPE 조회 대상을 특정 자식으로 한정 예) 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(하이버네이트 지원) 사용 예) 부모인 Item과 자식 Book이 있다. [JPQL] select i from Item i where treat(i as Book).author = 'kim' [SQL] select i.* from Item i where i.DTYPE = 'B'.. 2021. 5. 28. JPQL 패치 조인2 - 한계 패치 조인의 특징과 한계 패치 조인 대상에는 별칭을 줄 수 없다. 둘 이상의 컬렉션은 패치 조인 할 수 없다. 컬렉션을 패치 조인하면 페이징 API(setFirstResult, setMaxResults)를 사용할 수 없다. 연관된 엔티티들을 SQL 한 번으로 조회 - 성능 최적화 엔티티에 직접 적용하는 글로벌 로딩 전략보다 우선한다. @OneToMany(fetch = FetchType.LAZY) // 글로벌 로딩 전략 실무에서 글로벌 로딩 전략은 모두 지연 로딩 최적화가 필요한 곳은 패치 조인 적용 패치 조인 - 정리 모든 것을 패치 조인으로 해결할 수는 없다. 패치 조인은 객체 그래프를 유지할 때 사용하면 효과적 여러 테이블을 조인해서 엔티티가 가진 모양이 아닌 전혀 다른 결과를 내야 하면, 패치 조인.. 2021. 5. 27. JPQL 패치 조인1 - 기본 실무에서 정말 정말 중요하다!!! 패치 조인 SQL 조인 종류X JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능 join fetch 명령어 사용 패치 조인 ::= [ LEFT [OUTER] | INNER ] JOIN FETCH 조인 경로 엔티티 패치 조인 회원을 조회하면서 연관된 팀도 함께 조회(SQL 한 번에) SQL을 보면 회원 뿐만 아니라 팀(T.*)도 함께 SELECT [JPQL] select m from Member m join fetch m.team [SQL] SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID = T.ID 컬렉션 패치 조인(일대다 관계일 때는 데이터가 뻥튀기 되.. 2021. 5. 26. 이전 1 2 3 4 ··· 6 다음