본문 바로가기

JPA

JPA @JoinColumn에 대해서 알아보자

@JoinColumn를 아래 예시와 함께 알아보겠습니다.

Member.java
@Entity
public class Member { 

	@Id @GeneratedValue
	private Long id;

	@Column(name = "USERNAME")
	private String name;
	private int age;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "TEAM_ID")
	private Team team;
    
}

...........
Team.java
 @Entity
 public class Team {
 
   @Id @GeneratedValue
   private Long id;
   private String name;
   
   @OneToMany(mappedBy = "team")
   List<Member> members = new ArrayList<Member>();
   
 }
@JoinColumn이란?

@JoinColumn이 사용되는 용도는 Entity의 연관 관계에서 외래 키를 매핑하기 위해 사용됩니다.

위의 예제에서 team과 member는 1:N 관계입니다. 그렇다면 '다'쪽인 엔티티(member)에서 외래키를 관리하고 외래키를 관리하는 곳이 '연관 관계의 주인'입니다.

그러므로, member에서 team의 외래 키를 매핑해줘야 하기 때문에 member에서 @JoinColumn 어노테이션이 사용됩니다.

 

 

@JoinColumn 주요 속성

 

@JoinColumn의 name 속성은 매핑할 외래 키 이름을 정의합니다.

 위의 예시에서는 member 엔티티에 존재하는 team의 필드를 어떤 이름으로 member 테이블에 컬럼명으로 설정할 것인지를 나타냅니다. 즉, Member 테이블에서 외래 키는 TEAM_ID라는 이름으로 저장됩니다. 

 

@JoinColumn의 referencedColumnName 속성은 외래 키가 참조하는 대상 테이블의 컬럼명입니다. 

이때, 주의할 점은 referencedColumnName 속성을 생략하면 디폴트 값으로 연관 관계를 맺고 있는 상대 테이블의 pk 값으로 지정됩니다.

 

 

 

@JoinColumn 어노테이션 사용 방법 

@JoinColumn 어노테이션을 사용하기 위해선 다음과 같은 단계가 필요합니다.

1.관련 엔티티 클래스 생성  => 관계를 맺을 다른 엔티티가 생성되어 있어야 합니다.

2.@ManyToOne 어노테이션 사용 => 1:N 관계에서 "다"쪽 엔티티의 필드에 @ManyToOne 어노테이션을 사용합니다.

위의 예시의 경우에는 Member가 "다"쪽이기 때문에 이 클래스에서 @ManyToOne을 선언합니다.

3.@JoinColumn 어노테이션 사용 => @ManyToOne 어노테이션과 함께 사용하고, 외래 키 매핑을 적용시킵니다.

 

출처:
김영한 강사님 jpa 강의 자료

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

https://ksh-coding.tistory.com/105

https://ssdragon.tistory.com/77

https://boomrabbit.tistory.com/217

https://newcodingman.tistory.com/entry/스프링-JoinColumn-어노테이션