🌻 JAVA/자바 ORM 표준 JPA 프로그래밍

🌻 JAVA/자바 ORM 표준 JPA 프로그래밍

JPA - Fetch Join이 과연 만능인가? (N+1, Pagination)

들어가기 전 이전 시간에 알아봤던 N+1 해결법에 이어서 FetchJoin을 이용해서 해결할 수 있었습니다. 하지만 Fetch Join이라고 다 해결할 수 있는 것은 아닙니다. 이번 시간에는 Fetch Join을 사용했을 때 어떠한 사이드 이펙트가 있는지 알아보고 그 해결책에 대해서 알아봅니다. 1. FetchJoin, EntityGraph 사용 시 Pagination을 사용할 수 없다. FetchJoin과 EntityGraph 둘 다 동일한 증상이 발생합니다. Fetch Join만 테스트를 해보겠습니다. @Query( value = "select t from Team t join fetch t.members", countQuery = "select count(t) from Team t" ) List f..

🌻 JAVA/자바 ORM 표준 JPA 프로그래밍

[JPA] N+1 문제와 해결 (feat. fetch join, EntityGraph)

💡 아래 실습에 진행한 모든 코드는 Github에 있습니다. JPA N+1이란? 실무에서 JPA를 사용하다보면, N+1 쿼리를 만나게 됩니다. 여기서 N+1이란 Team(1) ↔ Member(N) 연관관계가 있다고 가정했을 때, 하나의 팀을 조회했지만 팀 내부에 있는 모든 멤버들이 함께 조회되면서 1+N 개의 쿼리가 발생하는 것을 의미합니다. 직접 테스트 코드를 통해 이러한 상황들을 해결할 수 있는 방법들을 살펴보고 각 상황이 또 어떤 사이드이펙트가 있는지도 알아보겠습니다. Entity 및 Repository 코드 실습에 사용될 코드는 다음과 같습니다. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Membe..

🌻 JAVA/자바 ORM 표준 JPA 프로그래밍

CascadeType.DELETE, orphanRemoval 차이점

CascadeType.DELETE, orphanRemoval 차이점 목표 CASCADE.REMOVE 와 orphanRemoval의 차이점에 대해서 알아보겠습니다. 테스트용 엔티티 public class Parent { @OneToMany(mappedBy = "parent") private List children = new ArrayList(); } public class Child { @ManyToOne @JoinColumn(name = "PARENT_ID") private Parent parent; } CASCADE.REMOVE @OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE) private List children = new ArrayLi..

🌻 JAVA/자바 ORM 표준 JPA 프로그래밍

LazyInitializationException이 나는 이유 (feat. 트랜잭션)

코드 전체 코드는 Github에 있습니다 :) TeamServiceTest @RunWith(SpringRunner.class) @SpringBootTest public class TeamServiceTest { @Autowired private TeamService teamService; @Before public void setup() { Team team = new Team(null, "team", new ArrayList()); for (int i = 1; i t.getMembers().get(0).getName()); } } TeamRepository @Repository public interface TeamRepository extends JpaRepository { } 상황 Serivce단에..

🌻 JAVA/자바 ORM 표준 JPA 프로그래밍

10-3) JPQL - 중급 문법

자바 ORM 표준 JPA 프로그래밍 - 기본편을 공부하며 정리한 내용입니다. 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다. 초급 웹 개발 프로그� www.inflearn.com 목차 경로 표현식 페치 조인 1 - 기본 페치 조인 2 - 한계 다형성 쿼리 엔티티 직접 사용 Named 쿼리 벌크 연산 경로 표현식 (실무에서 사용 권장 X) ( 경로 표현식으로 인해 묵시적으로 SQL 조인(내부 조인) 발생) - 나중에 큰 혼란을 줄 수 있음. 경로 표현식이란 ? .(점)을 찍어 객체 그래프를 탐색하는 것 Member mem..

🌻 JAVA/자바 ORM 표준 JPA 프로그래밍

10-2) JPQL - 기본 문법과 기능

자바 ORM 표준 JPA 프로그래밍 - 기본편을 공부하며 정리한 내용입니다. 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다. 초급 웹 개발 프로그� www.inflearn.com 목차 JPQL 소개 프로젝션(SELECT) 페이징 조인 서브쿼리 JPQL 타입 표현과 기타식 조건식(CASE 등등) JPQL 함수 🗒 JPQL 소개 JPQL은 객체지향 쿼리 언어이다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQ..

iseunghan
'🌻 JAVA/자바 ORM 표준 JPA 프로그래밍' 카테고리의 글 목록