Close
Close full mode
logo만렙 개발자 키우기

(1) 단방향 연관관계

Git RepositoryEdit on Github
Last update: a year ago by nowwaterReading time: 2 min

연관관계 중 다대일(N:1) 단방향 관계를 가장 먼저 이해해야 한다.

객체 연관관계와 테이블 연관관계의 가장 큰 차이

  • 참조를 통한 연관관계는 항상 단방향이다.

    • 객체 간 연관관계를 양방향으로 만들고 싶으면 반대쪽에도 필드를 추가해서 참조를 보관해야 한다.
      => 서로 다른 단방향 관계 2개
  • 객체는 참조(주소)로 연관관계를 맺는다.

    ex) a.getB().getC()

  • 테이블은 외래 키로 연관관계를 맺는다.

    ex) A JOIN B or B JOIN A

5.1.1 순수한 객체 연관관계

객체 그래프 탐색 : 참조를 사용해서 연관관계를 탐색한다.

Team findTeam = member1.getTeam();

5.1.2 테이블 연관관계

조인 : 데이터베이스는 외래 키를 사용해서 연관관계를 탐색할 수 있다.

SELECT T.*
FROM MEMBER M
JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID
WHERE M.MEMBER_ID = 'member1'

5.1.3 객체 관계 매핑

회원과 팀, 다대일 관계로 가정

// 매핑한 회원 엔티티
@Entity
public class Member {
@Id
@Column(name = "MEMBER_ID")
private Long id;
private String username;
//연관 관계 매핑
@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team;
//연관관계 설정
public void setTeam(Team team) {
this.team = team;
}
//Getter Setter
}
// 매핑한 팀 엔티티
@Entity
public class Team {
@Id
@Column(name = "TEAM_ID")
private String id;
private String name;
// Getter, Setter..
}

1. @ManyToOne

  • 다대일(N:1) 관계라는 매핑 정보

  • 연관관계 매핑시 이렇게 다중성을 나타내는 어노테이션을 필수로 사용

2. JoinColumn(name="TEAM_ID")

  • 조인 컬럼은 외래 키를 매핑할 때 사용

  • name 속성에 매핑할 외래 키 이름을 지정

  • 생략이 가능하다.


5.1.4 @JoinColumn

외래 키 매핑 시 사용

  • 기본 전략 : 필드명_참조 테이블의 컬럼명
  • ex) team_TEAM_ID

5.1.5 @ManyToOne

다대일 관계에서 사용

속성기능기본값
optionalfalse로 설정하면 연관된 엔티티가 항상 있어야 한다.true
fetch글로벌 페치 전략 설정. 자세한건 8장@ManyToOne = FetchType.EAGER

@OneToMany = FetchType.LAZY
cascade영속성 전이 기능 사용. 자세한건 8장
🚀 JPA — Previous
5장. 연관관계 매핑 기초
Next — 🚀 JPA
(2) 연관관계 사용