JPA MappedBy 정리

정병웅·2024년 5월 7일
0

JPA

목록 보기
3/4

김영한 강사님 강의를 듣고 스스로 정리한 내용입니다 📖

양방향 연관 관계란?

  • 객체 기준 각 두개의 엔티티가 서로 연관이 있는 키를 가지고 있는 관계
  • 테이블 기준 한 테이블에는 PK 값이 있고, 반대편 테이블에는 PK 값이 FK 로 가지고 있는 관계

테이블과 엔티티 연관관계의 차이

1. 객체는 서로 참조 값이 존재해야한다.

서로 단방향 두개로 관계를 맺음
쉽게 말해서 각 편도 2차로를 갖고 있다고 생각하면 쉬움!

2. 테이블은 외래키 값 하나로 양방향을 이룸.

연관관계 주인

  • 외래키를 관리(등록, 수정) 할 수 있음.
  • 주인이 아닌 쪽은 읽기(select)만 할 수 있음.
  • 주인이 아닌 엔티티는 mappedBy 사용 안함.
  • 주인 엔티티에서 외래키는 joinColumn 어노테이션으로 선언
  • 외래키가 있는 테이블이 연관관계 주인 엔티티임
  • 테이블에서는 1:N 에서 N이 외래키를 갖고 있고, 엔티티에서는 주인임

mappedBy

JPA 에서 제일 까다롭다고 생각하며, 아직도 체감 이해도는 60% 정도,,,?

  • 연관관계 주인이 아닌 엔티티에서 선언(N:1에서 1의 객체)
  • 해당 속성이 있을 경우 insert, update 는 할 수 없고, 읽기만 가능
  • 실무에서는 주인의 반대편의 엔티티를 mappedBy라고 부를 때가 있음.

예시 코드

  • 연관 관계 주인 엔티티
	,,,생략
@Entity
public class Member {

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;
    
    @Column(name = "USERNAME")
    private String username;
    
    @ManyToOne
    // name 속성에는 외래키 이름 선언
    @JoinColumn(name = "TEAM_ID")
    private Team team;
    ,,, 생략
}
  • mappedBy 엔티티(연관 관계 주인이 아닌 엔티티)
	,,, 생략
@Entity
public class Team {
    @Id @GeneratedValue
    @Column(name = "TEAM_ID")
    private Long Id;
    
    private String name;
    // 주인 엔티티에서 JonColumn의 파라미터 선언
    @OneToMany(mappedBy = "team")
    List<Member> members = new ArrayList<>();
	,,, 생략
profile
인생은 IT 노가다

0개의 댓글