Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

다대일 매핑[N:1] 본문

인프런/[인프런] 자바ORM 표준 JPA 프로그래밍

다대일 매핑[N:1]

Seung__ 2021. 8. 10. 22:35

1. 연관관계 매핑 시 고려사항 3가지


  • 다중성 : 데이터베이스의 다중성기준으로 생각
    • 다대일 : @ManyToOne ->제일 많이 씀
    • 일대다 : @OneToMany
    • 일대일 : @OneToOne
    • 다대다 : @ManyToMany -> 쓰지마! 멈춰! ->일대다, 다대일로 풀어서 사용.
  • 단방향, 양방향
    • 테이블
      - 외래 키 하나로 양쪽 조인 가능
      - 방향이라는 개념이 없음 ㅋㅋㅋ
    • 객체
      - 참조용 필드가 있는 쪽으로만 참조 가능.
      - 한쪽만 참조하면 단방향
      - 양쪽이 서로 참조하면 양방향.
  • 연관관계 주인
    • 테이블은 외래 키 하나로 두 테이블이 연관관계 맺음
    • 객체 양방향 관계는 A->B, B->A 처럼 참조 두개
    • 객체 양방향 관계는 참조가 2군데 있음. 둘 중 테이블의 외래키를 관리할 곳 지정 필요
    • 연과관계 주인 : 외래키를 관리하는 참조 -> 주인에서만
    • 등록, 변경 가능.
    • 주인의 반대편 : 외래키에 영향을 주지 않음. 단순 조회만 함.

 

 

2. 다대일 단방향


  • 데이터 베이스 기준으로 "다"쪽에 FK가 있어야 함.
  • @JoinColumn으로 Team 참조값과 TEAM_ID(FK)를 매핑함.
  • 가장 많이 사용함.
  • 반대는 일대다
  • Member->Team
@ManyToOne
@JoinColumn(name = "TEAM_ID") //Team 객체와 Team FK를 매핑
private Team team;

 

 

3. 다대일 양방향.


  • 반대 쪽 사이드 추가
  • 추가해도 테이블 변경 없음
  • 단지 조회 기능만 함.
  • Team -> Member
@OneToMany(mappedBy = "team") //일대다 매핑에서 나는 뭐랑 연결되어있지? Member 클래스의 Team 필드명.
private List<Member> memberList = new ArrayList<>();

 

4. 다대일 양방향 정리


  • 외래 키가 있는 쪽이 연관관계 주인
  • 주인 아닌곳에 mappedBy 적용
  • 양쪽을 서로 참조하도록 개발
  • 단방향을 먼저 잘 설계하고 나중에 필요시 양방향으로 추가하자
  • 그래도 테이블에 영향 없다.
Comments