김영한님이 지음, [자바 ORM 표준 JPA 프로그래밍] 책을 읽고 정리한 필기입니다.📢
단방향 연관관계
다대일 연관관계 | 다대일(N:1), 단방향
객체 연관관계
- 회원 객체는
Member.team필드(멤버변수)로 팀 객체와 연관관계를 맺음 - 회원 객체와 팀 객체는 단방향 관계이다.
member→team:member.getTeam()가능team→member:team.getMembers()불가능
- 상호 참조시 양방향 관계가 아닌 서로 다른 단방향 관계 2개 이다.
테이블 연관관계
- 회원 테이블은
TEAM_ID외래 키로 팀 테이블과 연관관계를 맺음 - 회원 테이블과 팀 테이블은 양방향 관계이다.
MEMBER→TEAM:SELECT * FROM MEMBER M JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID가능TEAM→MEMBER:SELECT * FROM TEAM T JOIN MEMBER M ON T.TEAM_ID = M.TEAM_ID가능
객체 관계 매핑
다대일 연관관계 | 다대일(N:1), 단방향 매핑
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
//매핑한 회원 엔티티
@Entity
public class Member {
@Id
@Column(name = "MEMBER_ID")
private String id;
private String username;
//연관관계 매핑
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
...
}
//매핑한 팀 엔티티
@Entity
@Entity
public class Team {
@Id
@Column(name = "TEAM_ID")
private String id;
private String name;
...
}
- 객체 연관관계 : 회원 객체의
Member.team필드 사용 - 테이블 연관관계 : 회원 테이블의
MEMBER.TEAM_ID외래 키 컬럼 사용 @ManyToOne- 다대일(N:1) 관계라는 매핑 정보
- 회원 팀은 다대일 관계(회원 기준)
@JoinColumn(name="TEAM_ID")- 외래 키를 매핑할 때 사용
name속성에는 매핑할 외래 키 이름을 지정- 이 어노테이션은 생략 가능
@JoinColumn
| 속성 | 기능 | 기본값 |
|---|---|---|
name |
매핑할 외래 키 이름 | {필드명} + _ + {참조하는 테이블의 기본 키 컬럼명} |
referencedColumnName |
외래 키가 참조하는 대상 테이블의 컬럼명 | 참조하는 테이블의 기본 키 컬럼명 |
foreignKey(DDL) |
외래 키 제약조건을 직접 지정할 수 있음 이 속성은 테이블을 생성할 때만 사용 |
|
uniquenullableinsertableupdatablecolumnDefinitiontable |
@Column의 속성과 동일 |
@ManyToOne
| 속성 | 기능 | 기본값 |
|---|---|---|
optional |
false로 설정하면 연관된 엔티티가 항상 있어야 함 |
true |
fetch |
글로벌 페치 전략을 설정 | - @ManyToOne=FetchType.EAGER- @OneToMany=FetchType.LAZY |
cascade |
영속성 전이 기능을 사용 | |
targetEntity |
연관된 엔티티의 타입 정보를 설정 이 기능은 거의 사용하지 않음 |
댓글남기기