JPA @JoinColumn

이승원·2025년 3월 6일

📌 @JoinColumn이란?

@JoinColumn 은 JPA(Java Persistence API)에서 외래 키(Foreign Key)를 매핑할 때 사용하는 애너테이션이다.
즉, 테이블 간 관계를 설정할 때 어떤 컬럼을 외래 키(FK)로 사용할지 명시하는 역할을 한다.


@JoinColumn 기본 개념

  • 연관된 엔티티의 외래 키(FK)를 설정하는 역할
  • 단방향 & 양방향 연관 관계에서 사용 가능
  • 기본적으로 @ManyToOne, @OneToOne 관계에서 사용됨
  • DB 테이블에서 FK 컬럼의 이름을 직접 지정할 수 있음

@JoinColumn 사용 예제

@ManyToOne 단방향 매핑

import jakarta.persistence.*;

@Entity
public class Member {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToOne  // 다대일 관계 (Member -> Team)
    @JoinColumn(name = "team_id")  // 외래 키(FK) 컬럼 이름을 "team_id"로 지정
    private Team team;
}

✅ @OneToMany 단방향 매핑

@Entity
public class Team {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(mappedBy = "team") // Member 엔티티의 "team" 필드에 의해 매핑됨
    private List<Member> members;
}
}

✅@JoinColumn과 mappedBy 차이

  • ✔ @JoinColumn → 외래 키를 현재 엔티티 테이블이 소유 (FK가 현재 테이블에 위치)
  • ✔ mappedBy → 외래 키를 반대편 엔티티 테이블이 소유

✅@JoinColumn 없이도 매핑이 가능할까?

  • 가능은 하지만 @JoinColumn을 생략하면 JPA가 기본 이름({필드명}_id)으로 FK를 자동 생성,
    하지만 명확한 매핑을 위해 @JoinColumn(name = "team_id")을 명시하는 것이 좋음.

	@ManyToOne
	private Team team; // 자동으로 FK 컬럼명 "team_id" 생성됨

0개의 댓글