티스토리 뷰
두 엔티티가 있다.
@Entity
class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long memberId;
@ManyToOne
private Team team;
}
@Entity
class Team {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long teamId;
@OneToMany
private Set<Member> members = new HashSet<>();
}
과연 두 엔티티는 '양방향 맵핑' 되었다고 말할 수 있을까?
db를 살펴보자
Member와 Team은 각 이름의 테이블로 서로가 양방향맵핑이 되었다고 생각되는데 뜬금없는 TEAM_MEMBERS가 생겨있다.
TEAM_MEMBERS는 Team엔티티에서 @OneToMany 를 통해 생긴 테이블이라는걸 알 수 있고
erd로 보자면 이렇게 얌전히 서로가 얽혀있는 관계가 아닌
Member -> Team
Team -> Team_Member 라는 2개의 '단방향 맵핑'이 생겨버린 상황이다.
위와같은 상황을 해결코자 사용하는 것이 mappedBy 다.
mappedBy는 '연관관계의 주인'이 누구냐고 해석하는 것이다.
@Entity
class Team {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long teamId;
@OneToMany(mappedBy = "team")
private Set<Member> members = new HashSet<>();
}
위와 같이 mappedBy 설정을 통해 Member의 엔티티에 Team의 값을 넣어주게 되었다.
각 엔티티의 양방향 맵핑을 설정해주게 되었다.
'Backend > SpringBoot' 카테고리의 다른 글
DTO, VO and Entity... (0) | 2023.01.26 |
---|---|
디자인패턴 - SingleTone (0) | 2023.01.24 |
ModelMapper Strategies(전략)이란 (0) | 2022.12.28 |
Ajax 와 Json, 그리고 Rest방식 (1) | 2022.12.26 |
ModelMapper (0) | 2022.12.25 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- JWT
- vue.js
- java 플레이그라운드
- 타임리프
- 토스페이먼츠
- LEVEL2
- 맥 error
- 스프링부트
- for
- springboot
- SpringSecurity
- 객체지향
- pinia
- 프로그래머스
- 다음 큰 숫자
- 알고리즘
- CompositionAPI
- mybatis구현
- Vue.js3
- 객체 지도
- 함께모으기
- 책리뷰
- vuex
- 객체지향의 사실과 오해
- 리눅스마스터2급
- script setup
- 짝지어제거하기
- 한권으로끝내기리눅스마스터2급
- it책 리뷰
- 정수형으로 변환
- Total
- Today
- Yesterday