JAVA/JPA

JAVA/JPA

[JPA/QueryDSL] N+1 문제 해결하는 방법(EntityGraph, fetchJoin)

JPA를 사용하다 보면 N+1 문제를 직면하는 일이 많다. N+1 문제란 예를 들어 친구 목록을 가져오는데 각각 친구들의 상태 메시지는 다른 테이블에서 가져온다고 가정하면 두 테이블을 한 번에 가져오지 않았을 때 쿼리는 두 번 나가게 될 것이고 친구들 전체를 가져오게 된다면 N+1로 쿼리 수가 상당히 많아질 것이다. 즉, 추가적인 쿼리를 계속 보내는 것이다. 따라서 이러한 다수의 쿼리를 보내는 것을 방지하기 위해 한 번에 가져와야 하는데 그때 쓰이는 방법은 JPA에서는 @EntityGraph이고, QueryDSL에서는 .fetchJoin을 해주면 된다. JPA(EntityGraph) @Override @EntityGraph(attributePaths = {"userCar", "account", "addr..

JAVA/JPA

[JPA] Auditing을 사용해 등록일, 수정일, 등록자, 수정자 기록 남기기

[본 포스팅은 실전! 스프링 데이터 JPA -인프런 편을 기반으로 작성하였습니다.] 실전! 스프링 데이터 JPA - 인프런 | 강의 스프링 데이터 JPA는 기존의 한계를 넘어 마치 마법처럼 리포지토리에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 모두 제공합니다. www.inflearn.com (스프링 데이터 JPA를 사용합니다.) JPA에서 Auditing을 사용해 등록일, 수정일, 등록자, 수정자 기록을 남길 수 있다. 실무에서는 최소한의 등록일, 수정일 정도의 기록이 없으면 나중에 힘들어진다고 한다..! 코드로 따라 해 보기 STEP 1) main 함수가 들어가 있는 클래스에 @EnableJpaAuditing 애노테이션을 넣고, 작성자, ..

JAVA/JPA

[JPA] 스프링 데이터 JPA로 벌크성 수정 쿼리 날려보기

[본 포스팅은 실전! 스프링 데이터 JPA -인프런 편을 기반으로 작성하였습니다.] 실전! 스프링 데이터 JPA - 인프런 | 강의 스프링 데이터 JPA는 기존의 한계를 넘어 마치 마법처럼 리포지토리에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 모두 제공합니다. www.inflearn.com 만약 나이가 20살 이상인 사람들의 나이를 +1 하려고 한다고 가정하자. 그러면 repository에서 다음과 같이 해주면 되는데 @Query로 쿼리를 직접 짜주고 @Modifying을 해주면 된다. @Modifying(clearAutomatically = true) //변경한다고 알림, 영속성 콘텍스트 초기화 @Query("update Member m ..

JAVA/JPA

[JPA] 스프링 데이터 JPA 페이징과 정렬 (feat. DTO를 사용해야 하는 이유)

[본 포스팅은 실전! 스프링 데이터 JPA -인프런 편을 기반으로 작성하였습니다.] 실전! 스프링 데이터 JPA - 인프런 | 강의 스프링 데이터 JPA는 기존의 한계를 넘어 마치 마법처럼 리포지토리에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 모두 제공합니다. www.inflearn.com 어떤 게시판을 봐도 모든 게시글을 한 페이지에 넣어 보여주는 서비스는 이 세상에 절대 없을 것이다. 그리고 그 게시글들을 페이지 별로 나누는 것이 페이징이다. 스프링 데이터 JPA에서는 페이징 기능을 편리하게 제공한다. 1. JPA Repository에서 반환타입(Page)과 파라미터(Pageble)를 넣어준다. 예를 들어 나이가 10살인 멤버 목록을 가..

JAVA/JPA

[JPA/JPQL] 페치 조인(fetch join)이란? 특징과 한계 - 엔티티 페치 조인, 컬렉션 페치 조인, DISTINCT로 중복 제거

[본 포스팅은 자바 ORM 표준 JPA 프로그래밍 기본 편을 기반으로 작성하였습니다.] 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 페치 조인은 실무에서 가장 중요한 부분이다. 페치 조인(fetch join) SQL 조인 종류가 아님 JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능 즉, 나와 관련된 것들은 다 긁어옴 페치 조인과 일반 조인의 차이 일반 조인 실행 시 연관된 엔티티를 함께 조회하..

JAVA/JPA

[JPA] @MappedSuperclass로 공통 칼럼 상속받기

[본 포스팅은 자바 ORM 표준 JPA 프로그래밍 기본 편을 기반으로 작성하였습니다.] 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 공통 매핑 정보가 필요할 때 사용(id, name) 만약 위와 같이 id와 name이 서로 공통되면 BaseEntity라는 추상 클래스를 만들어 id와 name을 저장하고 Member와 Seller는 그것을 상속받아 사용하면 된다. 상속관계 매핑 X 엔티티 X, 테이블과 매핑 X 부모 클래스를 상속받는 자식 클래스에 매핑..

JAVA/JPA

[JPA] 상속관계 전략과 매핑 (코드 예시)

[본 포스팅은 자바 ORM 표준 JPA 프로그래밍 기본 편을 기반으로 작성하였습니다.] 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 주요 애노테이션 @Inheritance(strategy=InheritanceType.XXX) - 부모 클래스에 선언 JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name=“DTYPE”) - 부모 클래스에..

JAVA/JPA

[JPA] 다대일(N:1), 일대다(1:N), 일대일(1:1) 연관관계 매핑 (코드 예시)

[본 포스팅은 자바 ORM 표준 JPA 프로그래밍 기본 편을 기반으로 작성하였습니다.] 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 연관관계 매핑 시 고려사항 3가지로는 다음과 같다. 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일(N:1): @ManyToOne 일대다(1:N): @OneToMany 일대일(1:1): @OneToOne 다대다(N:M): @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개..

JAVA/JPA

[JPA] 엔티티 매핑(@어노테이션)과 스키마 자동 생성 속성

[본 포스팅은 자바 ORM 표준 JPA 프로그래밍 기본 편을 기반으로 작성하였습니다.] 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com JPA에서 가장 중요한 일은 엔티티와 테이블을 정확하게 매핑하는 것이다. 따라서 매핑 어노테이션을 숙지해야 한다. 객체와 테이블 매핑: @Entity, @Table 필드와 칼럼 매핑: @Column 기본 키 매핑: @Id 연관관계 매핑: @ManyToOne, @JoinColumn 필드와 칼럼 매핑 - @Entitiy - ..

혁키
'JAVA/JPA' 카테고리의 글 목록