15. 단방향 연관관계

김성수·2023년 4월 6일
0

⚡ 생각대로 살지 않으면 사는대로 생각한다.

⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.


연관관계 매핑 기초

목표

  • 객체와 테이블 연관관계의 차이를 이해
  • 객체의 참조와 테이블의 외래 키를 매핑
  • 용어 이해
    • 방향(Direction): 단방향, 양방향
    • 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해
    • *연관관계의 주인(Owner)8: 객체 양방향 연관관계는 관리 주인이 필요

연관관계가 필요한 이유

객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. -조영호(객체지향의 사실과 오해)-

  • 연관관계가 없는 객체

Member와 Team의 관계는 1:N

객체를 테이블에 맞춰 데이터 중심으로 모델링을 하게되면, 협력 관계를 만들 수 없다.

  • 테이블외래 키로 조인을 사용해서 연관된 테이블을 찾는다.
  • 객체참조를 사용해서 연관된 객체를 찾는다.
  • 테이블과 객체 사이에는 이런 큰 간격이 있다.

Team과 Member 객체를 테이블에 맞춰 모델링하고, 멤버를 통해서 팀을 찾을 때, 객체 그래프를 참조하는 객체지향적인 방식과는 거리가 먼 코드를 작성할 수 밖에 없다.

단방향 연관관계

객체지향적으로 모델링을 하면, 위의 방식과는 다르게, TeamId가 아니라, Team의 참조값을 그대로 불러왔음을 알 수 있다.

그렇게 하려면,

@Column(name = "TEAM_ID")
private Long teamId;

위 코드를 아래와 같이 변경하면 된다.

@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
  • @ManyToOne : 다 대 일
  • @JoinColumn(name = "TEAM_ID") : TEAM_ID 컬럼을 PK(@Id)로 가진 테이블과 조인하겠다는 의미.

이렇게 하면 매핑이 끝나게 되고, 모델링은 아래 사진과 같이 이뤄진다.

이렇게 되면, 아래사진과 같은 코드가 작성 가능하다.

외래키로 참조하는 객체를 바로바로 참조가능하다. 아래와 같은 내용도 가능.


아웅 재밋다..
-끝-

profile
쌩수 Git >> https://github.com/SsangSoo?tab=repositories

0개의 댓글