본문 바로가기

fetch6

JPA - 객체지향 쿼리 언어 - QueryDSL Join, 서브쿼리 - 참조: 자바 ORM 표준 JPA 프로그래밍 - Join QueryDSL 에서 Join 은 innerJoin, leftJoin, rightJoin, fullJoin 을 지원한다. 또한 JPQL 의 on 과 fetch 기능도 사용가능하다. join 을 사용할때에는 1번째 파라미터에 조인 대상을, 2번째 파라미터에 alias 를 지정한다. 귀찮지만 Join 예제를 실행해보기 위해 Member 엔티티와 Order 엔티티가 맵핑된 데이터를 만들어주자. Member member1 = new Member(); member1.setName("Name#1"); member1.setAge(10); member1.setAddress( new Address("City#1", "Street#1", "Zipcode#1"));.. 2021. 8. 18.
JPA - 객체지향 쿼리 언어 - QueryDSL 검색조건, 페이징, 그룹 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 검색조건 QueryDSL 에서 검색조건 where 절의 기본 사용법을 알아보자. JPAQueryFactory query = new JPAQueryFactory(em); QMember qMember = QMember.member; List members = query.select(qMember) .from(qMember) .where(qMember.age.gt(20) .and(qMember.address.city.eq("City#2"))) .orderBy(qMember.age.desc()) .fetch(); members.forEach(member -> { System.out.println("Member age: " + member.getAge()); }).. 2021. 8. 16.
JPA - 객체지향 쿼리 언어 - JPQL Fetch Join - 참조: 자바 ORM 표준 JPA 프로그래밍 - 페치 조인(Fetch Join) 페치 조인은 SQL 에서 이야기하는 조인의 종류를 말하는것은 아니다. 이전에 지연 로딩에 대해서 알아본적이 있는지 지연 로딩과 관련된 얘기이며 성능 최적화를 위해 제공하는 기능이다. 문법이 크게 어렵지는 않다. [ INNER | LEFT [OUTER] ] JOIN FETCH 와 같이 기존 Join 문법 뒤에 FETCH 를 붙여주기만 하면 된다. - 엔티티 페치 조인 앞에서 User#1 과 주문 2 건을 사용하던 예제를 계속 사용해보자. Order 에서 Member 엔티티 @ManyToOne 맵핑시 FetchType 은 Lazy 라고 가정한다. 이전에 INNER JOIN 을 이용하여 Order 와 Member 엔티티를 Joi.. 2021. 7. 31.
JPA - 고급맵핑 - 요구사항 분석과 맵핑4 - 참조: 자바 ORM 표준 JPA 프로그래밍 - Fetch 설정 기억을 되살리기 위해 우리가 요구사항 분석과 맵핑3 까지 작성했던 UML 을 다시 한번 살펴보자. 클래스 간의 연관관계의 다중성을 JPA 코드로 작성할 때 별다른 Fetch 전략을 작성하지 않았었다. 만약 Project 팀에서 기본 전략을 지연 로딩으로 설정하기로 합의했다면 Fetch 를 설정해줘야 한다. Default 설정으로 @OneToMany, @ManyToMany 는 지연 로딩으로 설정되어있으므로 @OneToOne, @ManyToOne 을 설정해주자. 주문(Order) 와 주문 상품(Order Item) 의 @OneToOne, @ManyToOne 이 대상이다. @Entity @Table(name = "ORDERS") public c.. 2021. 7. 18.
JPA - 지연 로딩 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 지연 로딩 사내 주문 관리 시스템을 개발한다고 가정해보자. 요구사항은 아래와 같다. 회원은 팀 하나에만 속할 수 있다. 회원은 여러 주문내역을 가진다. 주문내역은 상품정보를 가진다. 이를 UML 다이어그램에서 다중성을 표시하면 위와 같다. 연관 엔티티를 로딩할 때 즉시냐 지연이냐를 결정하는것은 비즈니스 로직을 고려해야 한다. 비즈니스 로직이 아래와 같은 특성을 갖는다고 가정해보자. Member 와 Team 은 자주 함께 사용되었다. Member 과 연관된 Order 는 가끔 사용되었다. Order 와 연관된 Product 는 자주 함께 사용되었다. @Entity public class Member { @Id @Column(name = "USER_ID") .. 2021. 7. 16.
JPA - 즉시 로딩과 지연 로딩 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 즉시 로딩과 지연 로딩 이전에 살펴본 프록시 객체는 주로 연관된 엔티티를 지연 로딩할 때 사용한다. Member member = em.find(Member.class, 2L); Team team = member.getTeam(); System.out.println(team.getName()); 위와 같이 회원이 팀에 소속되어 있다고 가정해보자. 이때 회원 엔티티 조회시 팀까지 한꺼번에 하는게 좋을까? 아니면 팀 엔티티를 실제 사용시할때까지 조회를 미루는것이 좋을까? JPA 는 이 두 가지 방식을 모두 지원한다. 즉시 로딩: 엔티티를 조회할 때 연관된 엔티티도 함께 조회한다. @ManyToOne(fetch = FetchType.EAGER) 로 설정할 수 있.. 2021. 7. 15.