[스프링] JPA와 연관관계

JPA는 객체 간의 연관관계를 매핑하는 데 매우 유용한 도구입니다. 이번에는 JPA를 사용하여 객체 간의 연관관계를 매핑하는 방법에 대해 알아보겠습니다.

연관관계란?

연관관계는 객체 간의 관계를 말합니다. 테이블 간의 관계를 맺는 것과 마찬가지로, 객체 간의 관계를 맺을 때도 연관관계를 매핑해주어야 합니다. JPA에서는 이를 위해 다양한 매핑 애노테이션을 제공합니다.

양방향 연관관계 매핑

JPA에서는 @OneToOne, @OneToMany, @ManyToOne, @ManyToMany와 같은 애노테이션을 사용하여 객체 간의 연관관계를 매핑할 수 있습니다. 이때 주의할 점은 양방향 연관관계를 매핑할 때는 양쪽 객체에 서로를 참조하는 코드를 작성해주어야 합니다.

예를 들어, 회원(Member)과 팀(Team)이 일대다 관계인 경우, Member 엔티티에는 Team 객체를 참조하는 필드를 추가하고, Team 엔티티에는 Member 객체를 참조하는 필드를 추가해야 합니다.

@Entity
public class Member {
    @ManyToOne
    private Team team;
    //...
}

@Entity
public class Team {
    @OneToMany(mappedBy = "team")
    private List<Member> members;
    //...
}

연관관계의 FetchType 설정

연관된 엔티티를 조회할 때 사용되는 FetchType에는 EAGER와 LAZY가 있습니다. EAGER는 즉시로 연관된 엔티티를 조회하고, LAZY는 실제로 접근할 때까지 조회를 미루는 방식입니다. FetchType을 설정할 때는 각 상황에 맞게 적절한 값을 선택해주어야 합니다.

@OneToMany(mappedBy = "team", fetch = FetchType.LAZY)
private List<Member> members;

이상으로 JPA의 연관관계 매핑과 관련된 내용을 살펴보았습니다. 각 애노테이션과 설정값에 대해 자세히 공부해보면, 객체 간의 연관관계를 효과적으로 매핑할 수 있을 것입니다.