연관관계를 매핑할 떄 고려해야하는 3가지 사항
- 다중성
- 단방향, 양방향
- 연관관계의 주인
다중성의 종류
- 다대일: @ManyToOne
- 일대다: @OneToMany
- 일대일: @OneToOne
- 다대다: @ManyToMany
외래키를 매핑하는 방법
@JoinColumn
| 속성 | 기능 | 기본 값 |
| name | 매핑할 외래 키 이름 | "필드명" + "_" 을 참조하는 테이블의 기본 키 컬럼 명 |
| referencedColumnName | 외래키가 참조하는 대상 테이블의 컬럼명 | 참조하는 테이블의 기본 키 컬럼 명 |
| foreignKey(DDL) | 외래 키 제약조건을 직접 지정 테이블을 생성할 때만 사용 |
|
| unique | @Column의 속성과 같음 | |
| nullable | @Column의 속성과 같음 | |
| insertable | @Column의 속성과 같음 | |
| updateable | @Column의 속성과 같음 | |
| columnDefinition | @Column의 속성과 같음 | |
| table | @Column의 속성과 같음 |
다대일(@ManyToOne)
다대일 단방향과 다대일 양방향이 있다.
다대일 단방향: 가장 많이 사용하는 연관관계이며 이에 반대되는 관계는 일대다 이다.
class Member{
//연관관계 주인 클래스, Many
@Id
@Column(name = "MEMBER_ID")
private Long id;
private String username;
@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team; //Team 객체와 연관관계를 맺음
}
class Team{
//One
@Id
@Column(name = "TEAM_ID")
private Long id;
private String name;
}
다대일 양방향: 서로가 서로를 참조함
반대편에 @OneToMany를 사용하여 양방향 설정
class Member{
//연관관계 주인 클래스, Many
@Id
@Column(name = "MEMBER_ID")
private Long id;
private String username;
@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team; //Team 객체와 연관관계를 맺음
}
class Team{
//One
@Id
@Column(name = "TEAM_ID")
private Long id;
private String name;
@OneToMany(mappedBy = "team")//양방향 연관관계 설정
private List<Member> memberList = new ArrayList<>();
}
@ManyToOne 속성
| 속성 | 기능 | 기본값 |
| optional | false로 설정하면 연관된 엔티티가 항상 있어야 한다 | true |
| fetch | 글로벌 패치 전략을 설정한다 | FetchType.EAGER(즉시 로딩)(default) FetchType.LAZY(지연 로딩)(권장 설정) |
| cascade | 영속성 전이 기능을 사용한다 | |
| targetEntity | 연관된 엔티티의 타입 정보를 설정한다. |
출처
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com
'Spring' 카테고리의 다른 글
| [Spring JPA] 다양한 연관관계 매핑(@OneToOne, @ManyToMany) (0) | 2023.04.16 |
|---|---|
| [Spring JPA] 다양한 연관관계 매핑(@OneToMany) (0) | 2023.04.14 |
| [Spring JPA] 단방향, 양방향 연관관계 (0) | 2023.04.09 |
| [Spring JPA] 엔티티 설계 (0) | 2023.04.08 |
| [Spring JPA] 어노테이션 정리 (0) | 2023.04.05 |