티스토리 뷰
728x90
반응형
양방향 매핑의 의미
양방향 매핑이란 두 엔티티 간에 서로 관계를 가진다는 의미를 가진다
예시) Member 테이블과 Team 테이블 관계
양방향 매핑
Member 엔티티는 단방향과 동일
@Entity
public class Member {
@Id
private Long id;
@Column(name="USERNAME")
private String name;
@ManyToOne // 다 대 1 (Team 하나에 여러 Member 가 들어간다)
@JoinColumn(name="TEAM_ID")
private Team team;
}
Team 엔티티에는 컬렉션을 추가
@Entity
public class Team{
@Id
private Long id;
private String name;
@OneToMany(mappedBy="team")
private List<Member> merberList = new ArrayList<Member>(); //Member 와 연관관계
}
양방향 매핑의 객체 그래프 탐색
Team findTeam = em.find(Team.class, team.getId());//TEAM 조회
int memberSize = findTeam.getMemberList().size(); //TEAM을 통하여 MEMBER list 역방향 조회
객체와 테이블이 관계를 맺는 차이
- 객체 연관관계 = 2개
- 회원 → 팀 연관관계 1개(단방향)
- 팀 → 회원 연관관계 1개(단방향)
- 테이블 연관관계 = 1개
- 회원 ↔ 팀의 연관관계 1개(양방향)
객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계를 가지는 것이다.
- 객체를 양방향으로 참조하려면 단방향 두개를 가져야한다.
ex) A → B A가 B와 연관 맺을 때, B → A B가 A를 연관 맺을 때
//A -> B
class A {
B b;
}
//B -> A
class B {
A a;
}
- 테이블 같은 경우는 외래키 하나를 가지고 양방향으로 왔다 갔다할 수 있다.
그러나 객체의 연관 관계에서는 양방향을 가질 때 반드시 외래키 하나를 지정해주어야 한다.
이것이 연관관계의 주인(OWNER) 이다.
연관관계의 주인설정 및 양방향 매핑 규칙
- 양방향 매핑 규칙
- 객체의 두 관계 중 하나를 연관관계의 주인으로 지정
- 연관관계의 주인만이 외래 키를 관리(등록, 수정)
- 주인이 아닌 쪽은 조회만 가능
- 주인은 mappedBy 속성 사용 안함
- 주인이 아닌쪽은 mappedBy 속성으로 주인 지정
- 주인 설정
- 외래 키가 있는 곳을 주인으로 설정
양방향 매핑시 가장 많이 하는 실수
- 연관관계의 주인에 값을 입력하지 않는 경우
- 순수한 객체 관계를 고려하여 항상 양쪽다 값을 입력해주도록 한다.
- 양방향 매핑 시 무한 루프 조심
- toString, lombok, JSON 생성 라이브러리 사용
728x90
반응형
'프로그램 언어 > Spring JPA' 카테고리의 다른 글
SPRING JPA 상속 관계 매핑 (조인 전략) (0) | 2023.04.27 |
---|---|
SPRING JPA 상속관계(단일 테이블 전략) (0) | 2023.04.26 |
테이블 지향 모델링 vs 객체 지향 모델링 (0) | 2023.04.26 |
엔티티 매핑(번외 편) (0) | 2023.04.26 |
엔티티 매핑(기본편) (0) | 2023.04.26 |
250x250
반응형
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정의
- 이미지
- 컨테이너
- 리눅스
- leatcode
- Linux
- insert
- 스케줄러
- mybatis
- Quartz
- 격리수준
- centos7
- 권한
- dfs
- Java
- 캐시
- Lock
- 도커
- 캘린더
- 개념 이해하기
- spring
- docker
- Cache
- dockerfile
- ncp
- LocalDate
- 네이버 클라우드
- 알고리즘
- hazelcast
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 | 31 |
글 보관함