@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
'JPA' 카테고리의 다른 글
[JPA] JPA의 더티 체킹(dirty checking)이란? (2) | 2024.09.12 |
---|---|
JPA로 엔티티 설계 시 주의사항 및 고려사항을 알아보자 (개인적 견해) (0) | 2024.07.07 |
JPA영속성 컨텍스트(Persistence Context)에 대해 알아보자 (0) | 2024.05.09 |
JPA 프록시란? (0) | 2024.04.26 |
JPA 연관 관계, 연관 관계 매핑 그리고 연관 관계 주인 이해하기 (0) | 2024.03.01 |