📘 자바 객체 간 관계 & JPA 연관관계 매핑 완전 정리


✅ 1. 자바 객체 간의 관계 vs 관계형 DB의 관계

🔍 관계형 DB의 표현: 외래 키(Foreign Key)

-- 예시: 회원(Member)이 팀(Team)에 소속된다
CREATE TABLE team (
  id BIGINT PRIMARY KEY,
  name VARCHAR(50)
);

CREATE TABLE member (
  id BIGINT PRIMARY KEY,
  username VARCHAR(50),
  team_id BIGINT,
  FOREIGN KEY (team_id) REFERENCES team(id)
);

🔗 자바 객체에서는 참조를 통해 관계 표현

@Entity
public class Member {
    @Id
    private Long id;

    private String username;

    @ManyToOne
    @JoinColumn(name = "team_id") // DB 외래키와 연결
    private Team team;
}

@Entity
public class Team {
    @Id
    private Long id;

    private String name;
}

🔑 핵심: @JoinColumn(name = "team_id")를 통해 자바의 team 필드와 DB의 외래 키 team_id를 매핑

즉, 객체 간 참조(객체 그래프)DB의 외래 키를 연결 → 연관관계 매핑


✅ 2. 연관관계의 주인

📌 1:N 관계에서 N쪽이 연관관계의 주인

@Entity
public class Member {
    @ManyToOne
    @JoinColumn(name = "team_id") // 이 필드가 외래 키! (연관관계의 주인)
    private Team team;
}

@Entity
public class Team {
    @OneToMany(mappedBy = "team") // 주인이 아님 (읽기 전용)
    private List<Member> members = new ArrayList<>();
}

📝 mappedBy = "team" → Member 클래스의 team 필드에 의해 연관관계가 관리된다는 의미


✅ 3. Fetch 전략 (LAZY vs EAGER)

🐢 LAZY (지연 로딩)