@JoinColumn과 mappedBy

Kevin·2023년 9월 4일
0

JPA(Hibernate)

목록 보기
5/9
post-thumbnail

JPA에서 1:N 양방향 관계인 Member와 Team 엔티티가 있다고 하자.

Team.class

@Entity
@Getter @Setter
public class Team {

    @Id @GeneratedValue
    @Column(name="team_id")
    private Long id;

    private String name;

    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<>();
}

Member.class

@Entity
@Getter @Setter
public class Member {

    @Id @GeneratedValue
    @Column(name="member_id")
    private Long id;

    @NotEmpty
    private String name;

    @ManyToOne
	@JoinColumn(name = "team_id")
    private Team team;
}

이 관계에서의 주인은 N인 Team 엔티티이고, Team 엔티티는 늘 Member 외래키를 지니고 있을 것이다.

mappedBy는 연관 관계의 주인이 아닌 곳에 두어야 하니, Member에 두어야 한다.

mappedBy의 값으로는 주인 엔티티에 존재하는 본인 외래키 필드 명을 적으면 된다.

ex) Member.team


JoinColumn의 name 속성은 말 그래도 Member 엔티티에 존재하는 team이라는 필드를 어떤 이름으로 Member 테이블에 컬럼명으로 설정할 것인지를 나타내주는 것이다.

@JoinColumn(name="team_id") 라고 적었으면 그냥 Member 테이블에 team_id 라는 컬럼명이 정의되는 것이다.


Team 엔티티 경우에는 mappedBy를 통해서 Member 엔티티와의 연관 관계를 알 수 있지만, Member 엔티티 경우에는 어떻게 Team 엔티티와 연관 관계가 있다는 것을 알 수 있을까?


JoinColumn에서 referencedColumnName 속성을 생략하면 자동으로 대상 테이블의 pk 값으로 지정 되기 때문이다.

@JoinColumn(name = "team_id")
private Team team;

코드의 경우에는 referencedColumnName 속성을 생략했기에, Team 엔티티의 pk로 자동 지정이 된다.


참고 레퍼런스

[JPA] @JoinColumn 확실히 알고가기!!!

profile
Hello, World! \n

0개의 댓글