김영한님이 지음, [자바 ORM 표준 JPA 프로그래밍] 책을 읽고 정리한 필기입니다.📢

단방향 연관관계

img-name
다대일 연관관계 | 다대일(N:1), 단방향

객체 연관관계

  • 회원 객체는 Member.team필드(멤버변수)로 팀 객체와 연관관계를 맺음
  • 회원 객체와 팀 객체는 단방향 관계이다.
    • memberteam : member.getTeam() 가능
    • teammember : team.getMembers()불가능
  • 상호 참조시 양방향 관계가 아닌 서로 다른 단방향 관계 2개 이다.

테이블 연관관계

  • 회원 테이블은 TEAM_ID 외래 키로 팀 테이블과 연관관계를 맺음
  • 회원 테이블과 팀 테이블은 양방향 관계이다.
    • MEMBERTEAM : SELECT * FROM MEMBER M JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID 가능
    • TEAMMEMBER : SELECT * FROM TEAM T JOIN MEMBER M ON T.TEAM_ID = M.TEAM_ID 가능

객체 관계 매핑

img-name
다대일 연관관계 | 다대일(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 연관된 엔티티의 타입 정보를 설정
이 기능은 거의 사용하지 않음
 

JPA 카테고리 내 다른 글 보러가기

댓글남기기