(1) 단방향 연관관계
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 MJOIN TEAM T ON M.TEAM_ID = T.TEAM_IDWHERE M.MEMBER_ID = 'member1'
5.1.3 객체 관계 매핑
회원과 팀, 다대일 관계로 가정
// 매핑한 회원 엔티티@Entitypublic 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}
// 매핑한 팀 엔티티@Entitypublic 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
다대일 관계에서 사용
속성 | 기능 | 기본값 |
---|---|---|
optional | false로 설정하면 연관된 엔티티가 항상 있어야 한다. | true |
fetch | 글로벌 페치 전략 설정. 자세한건 8장 | @ManyToOne = FetchType.EAGER @OneToMany = FetchType.LAZY |
cascade | 영속성 전이 기능 사용. 자세한건 8장 |