728x90

JPA 패치 전략 (Fetch Strategy)이란?

JPA에서 패치 전략이란 연관된 엔티티를 조회할 때, 즉시 로딩(EAGER)과 지연 로딩(LAZY) 방식을 지정하는 것을 의미합니다.

  • EAGER (즉시 로딩)

즉시 로딩은 연관된 엔티티가 항상 같이 로딩되어 가져옵니다. 예를 들어, Member 엔티티와 Team 엔티티가 일대다 관계일 때, Member 엔티티를 조회할 때 연관된 Team 엔티티도 함께 조회합니다.

@Entity
public class Member {
    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    @ManyToOne(fetch = FetchType.EAGER)
    private Team team;
    
    // Getter, Setter
}

@Entity
public class Team {
    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    // Getter, Setter
}
  • LAZY (지연 로딩)

지연 로딩은 연관된 엔티티가 실제 사용될 때 로딩됩니다. 예를 들어, Member 엔티티와 Order 엔티티가 일대다 관계일 때, Member 엔티티를 조회할 때 연관된 Order 엔티티는 필요할 때 로딩됩니다.

@Entity
public class Member {
    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY)
    private List<Order> orders = new ArrayList<>();
    
    // Getter, Setter
}

@Entity
public class Order {
    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    @ManyToOne
    private Member member;
    
    // Getter, Setter
}

내저장소 바로가기 luxury515

728x90

JPA 조인 전략 (Join Strategy)

JPA에서 조인 전략이란 상속 관계 매핑을 위한 전략으로, 부모 클래스와 자식 클래스를 각각 별도의 테이블로 만들고 조인(JOIN) 연산을 이용해 조회하는 방식입니다.

조인 전략 예시 코드

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Item {
    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    private int price;
    
    // Getter, Setter
}

@Entity
public class Book extends Item {
    private String author;
    
    private String isbn;
    
    // Getter, Setter
}

@Entity
public class Movie extends Item {
    private String director;
    
    private String actor;
    
    // Getter, Setter
}

위 코드에서 Item 클래스에 @Inheritance(strategy = InheritanceType.JOINED) 어노테이션을 추가하여 조인 전략을 사용합니다. Book 클래스와 Movie 클래스는 각각 Item 클래스를 상속받으며, 각각 자신만의 속성을 가지고 있습니다. 이 때, JPA는 각 클래스를 별도의 테이블로 생성하고, JOIN 연산을 이용해 조회합니다.


내저장소 바로가기 luxury515

728x90

JPA 맵핑 전략 (Mapping Strategy)

JPA에서 맵핑 전략이란 데이터베이스 테이블과 객체 간에 매핑하는 방식을 지정하는 것입니다.

맵핑 전략 종류

  1. 객체-관계 매핑 (ORM) : 객체를 테이블에 매핑하는 방식
  1. 클래스-테이블 매핑 : 클래스를 테이블에 매핑하는 방식
  1. 필드-컬럼 매핑 : 필드를 컬럼에 매핑하는 방식
  1. 기본 키 매핑 : 기본 키를 매핑하는 방식
  1. 연관관계 매핑 : 연관관계를 매핑하는 방식

맵핑 전략 예시 코드

@Entity
@Table(name = "MEMBER")
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;
    
    @Column(name = "NAME")
    private String name;
    
    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
    private Team team;
    
    // Getter, Setter
}

@Entity
@Table(name = "TEAM")
public class Team {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;
    
    @Column(name = "NAME")
    private String name;
    
    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<>();
    
    // Getter, Setter
}

위 코드에서 @Entity, @Table, @Id, @GeneratedValue, @Column, @ManyToOne, @JoinColumn, @OneToMany 어노테이션 등을 이용해 각각의 맵핑 전략을 지정하였습니다.

  • 객체-관계 매핑 : @Entity 어노테이션
  • 클래스-테이블 매핑 : @Table 어노테이션
  • 필드-컬럼 매핑 : @Column 어노테이션
  • 기본 키 매핑 : @Id, @GeneratedValue 어노테이션
  • 연관관계 매핑 : @ManyToOne, @JoinColumn, @OneToMany 어노테이션


내저장소 바로가기 luxury515

'Back-end > JPA' 카테고리의 다른 글

JPA 패치전략  (0) 2023.04.13
JPA 조인전략  (0) 2023.04.13
JPA에서 Specification 사용해보기  (0) 2023.04.13
JPA 에서 복합키 를 사용하는 이유 ,구현 방법.  (0) 2023.04.11
JoinColumn vs MappedBy 에 관하여  (0) 2023.04.11

+ Recent posts