JPA를 사용할 때 N+1 문제를 해결하기 위해 default_batch_fetch_size를 설정하여 in절로 여러 개를 한 번에 가져올 수 있도록 한다. 하지만 실제 default_batch_fetch_size를 100으로 설정하고 30개의 데이터를 가져오려 하니 25개를 담은 in절 쿼리 1번 + 5개를 담은 in절 쿼리 한 번이 호출되었다. ...
[Java] 일급 컬렉션
일급 컬렉셕이란? 단순하게 컬렉션을 Wrapping 하여 클래스로 묶어내는 것을 말한다. 예를 들어, 다음과 같은 코드를 Map<String, String> map = new HashMap<>(); map.put("1", "A"); map.put("2", "B"); map.put("3", "C"); 아래와 같이 Wrappi...
[자바 ORM 표준 JPA 프로그래밍-기본편] 벌크 연산
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. JPQL - 벌크 연산 일반적인 여러 객체에 대한 업데이트나 delete문이라 생각하면 된다. 재고가 10개 미만인 모든 상품의 가격을 10% 상승하려면? JPA 변경 감지 기능으로 실행하려면 너무 많은 SQL 실행 1)재고가 10개 미만인 상품을 ...
[자바 ORM 표준 JPA 프로그래밍-기본편] Named 쿼리
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. JPQL - Named 쿼리 (정적 쿼리) 미리 정의해서 이름을 부여해두고 사용하는 JPQL 정적 쿼리 어노테이션, XML에 정의 애플리케이션 로딩 시점에 초기화 후 재사용 진짜 네임드 쿼리의 장점 애플리케이션 로딩 시점에 JPA가 ...
[자바 ORM 표준 JPA 프로그래밍-기본편] 엔티티 직접 사용
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 엔티티 직접 사용 - 기본 키 값 JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용 [JPQL] select count(m.id) from Member m //엔티티의 아이디를 사용 select count(m) from Member m ...
[자바 ORM 표준 JPA 프로그래밍-기본편] 다형성 쿼리
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. JPQL - 다형성 쿼리 크게 중요하진 않은 내용이지만 보고 넘어가자. TYPE 조회 대상을 특정 자식으로 한정 예) Item 중에 Book, Movie를 조회해라 [JPQL] select i from Item i where type(i) IN (Book, ...
[자바 ORM 표준 JPA 프로그래밍-기본편] 페치조인2 - 한계
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 페치 조인의 특징과 한계 1) 페치 조인 대상에는 별칭(alias)을 줄 수 없다. 하이버네이트는 가능, 가급적 사용X 예시 String query = "select distinct t from Team t join fetch t.members as m where m...
[자바 ORM 표준 JPA 프로그래밍-기본편] 페치조인1 - 기본
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. JPQL - 페치 조인(fetch join) 실무에서 정말정말 중요함 SQL 조인 종류X JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능 join fetch 명령어 사용 페치 조인 ::= [ LEF...
[자바 ORM 표준 JPA 프로그래밍-기본편] 경로표현식
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. 경로 표현식 .(점)을 찍어 객체 그래프를 탐색하는 것 경로 표현식 용어 정리 상태 필드(state field): 단순히 값을 저장하기 위한 필드(ex: m.username) 연관 필드(association field): 연관관계를 위한 필드 ...
[자바 ORM 표준 JPA 프로그래밍-기본편] JPQL 함수
본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다. JPQL 기본 함수 JPQL에서 제공하는 표준 함수이기에 데이터베이스에 관계없이 사용하면 된다. CONCAT String query = "select concat('a', 'b') from Member m"; List<String> resultList = e...