김영한님이 지음, [자바 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) |
외래 키 제약조건을 직접 지정할 수 있음 이 속성은 테이블을 생성할 때만 사용 |
|
unique nullable insertable updatable columnDefinition table |
@Column 의 속성과 동일 |
@ManyToOne
속성 | 기능 | 기본값 |
---|---|---|
optional |
false 로 설정하면 연관된 엔티티가 항상 있어야 함 |
true |
fetch |
글로벌 페치 전략을 설정 | - @ManyToOne=FetchType.EAGER - @OneToMany=FetchType.LAZY |
cascade |
영속성 전이 기능을 사용 | |
targetEntity |
연관된 엔티티의 타입 정보를 설정 이 기능은 거의 사용하지 않음 |
댓글남기기