백엔드/JPA 5

[JPA] N+1 문제를 해결하기 위한 fetch

오늘 포스팅에서는 fetch = Lazy에서 발생할 수 있는 N+1 문제를 해결하기 위해 등장한 fetch join의 장점과 한계를 정리해보는 시간을 가지겠습니다. 1. JPA에서 N+1 문제의 발생 코드 Team teamA = new Team(); teamA.setName("teamA"); em.persist(teamA); Team teamB = new Team(); teamB.setName("teamB"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("member1"); member1.changeTeam(teamA); em.persist(member1); Member member2 = new Member(); membe..

백엔드/JPA 2023.03.06

[JPA] 값 타입 컬렉션 @ElementCollection과 @CollectionTable 활용 예시

db에는 컬렉션을 저장할 수 없습니다. 따라서 jpa의 값 타입 컬렉션은 @ElementCollection과 @CollectionTable 어노테이션을 통해 구현할 수 있습니다. 이번 글에서는 이 어노테이션들을 활용한 값 타입 컬렉션의 개념과 특징, 수정에 대해 알아보겠습니다. 목차 1. 값 타입 컬렉션의 개념과 특징 2. 값 타입 컬렉션의 수정 값 타입 컬렉션의 개념과 특징 1. 개념 값 타입을 컬렉션에 담아 사용하는 것을 의미합니다.DB에서는 따로 컬렉션을 저장할 수 없으므로, 컬렉션에 해당하는 테이블을 하나 추가하여 컬렉션을 구현합니다. 이를 위해 @ElementCollection과 @CollectionTable 어노테이션을 사용합니다. 2. 특징 ① 값 타입 컬렉션은 값 타입과 마찬가지로, 따로 ..

백엔드/JPA 2022.08.22

[JPA] 기본 값 타입과 임베디드(embedded) 타입

JPA 의 대표적인 값 타입인 기본 값 타입과 임베디드 타입에 대해 알아봅니다. 목차 1. 기본 값 타입 2. 임베디드 타입 기본 값 타입 1. 개념 int, String, Long처럼 단순히 값으로 사용되는 자바의 기본 타입입니다. 식별자가 없고 값만 있어 변경하면 추적이 불가능합니다. 예를 들어 아래의 코드에서 a 값을 변경해도, b가 추적할 수 없습니다. 코드 예제 int a = 10; int b = a; a = 20; System.out.println("a = " + a); System.out.println("b = " + b); // 여전히 10입니다. 2. 종류 ① 자바 기본 타입 (int, double) ② 래퍼 클래스 (Integer, Long) ③ String 3. 특징 ① 생명 주기를 ..

백엔드/JPA 2022.08.19

[JPA] 연관관계 주인이 필요한 이유

연관관계의 주인이 필요한 이유는 무엇일까요? 객체 지향의 패러다임과 데이터베이스의 패러다임에 차이가 있기 때문입니다. 단방향과 양방향 매핑과 관련해 각 패러다임의 차이를 이해하면 연관관계의 주인이 필요한 이유를 알 수 있습니다. 목차 1. 단방향과 양방향 2. 연관관계의 주인 3. 주의사항 JPA 단방향과 양방향 데이터베이스 테이블은 외래 키 하나로 양쪽 테이블 조인이 가능합니다. 하지만 객체는 참조용 필드가 있는 객체만 다른 객체를 참조하는 것이 가능합니다. 따라서 두 객체 사이에 하나의 객체만 참조용 필드를 갖고 참조하면 단방향, 두 객체 모두가 각각 참조용 필드를 갖고 참조하면 양방향 관계라고 합니다. 실제로 양뱡향 관계라는 것은 두 객체가 단방향 참조를 각각 가져 양방향 관계처럼 사용한다는 의미입..

백엔드/JPA 2022.08.11

[JPA] 영속성 컨텍스트 정리

[JPA] 영속성 컨텍스트 정리 목차 1. 영속성 컨텍스트 개요 2. 영속성 컨텍스트의 장점 3. flush 영속성 컨텍스트 개요 개념 엔티티를 영구 저장하는 환경이라는 뜻으로, 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 1차 캐시 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저가 영속성 컨텍스트에서 엔티티를 관리한다. 엔티티 생명주기 1) 비영속(new/transient) 영속성 컨텍스트와 전혀 관계없는 새로운 상태의 엔티티 Member member = new Member(); 2) 영속(managed) 영속성 컨텍스트에서 관리되는 상태 Member member = new Member(); EntityManager em = emf.createEntityManage..

백엔드/JPA 2022.08.05
728x90