일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HTTP3
- KAKAOLOGINAPI
- 무상태프로토콜
- 멱등활용
- ERROR TYPE : org.apache.ibatis.binding.BindingException
- JPA
- Invalid bound statement (not found)
- org.apache.ibatis.binding.BindingException
- DB방언
- 캐쉬가능
- 네이버로그인API
- 김영한JPA
- anyMatch
- HTTPMESSAGE
- RFC723x
- gitreset
- Git
- @Table
- 데이터베이스 방언
- 네이버 연결된 서비스
- fixedDelay
- gitrevert
- 매핑정보가없는필드
- Transaction not successfully started
- SpringBoot
- hibernate.dialect
- @Entity
- http
- initialDelay
- 자바ORM표준프로그래밍
- Today
- Total
twocowsong
일 대 다 양방향 본문
1 : N 양방향 매핑은 존재하지 않습니다.
대신 N : 1 양방향 매핑을 사용해야 합니다.
(1 : N 양방향과 N : 1 양방향은 사실 같은 말입니다. 여기서는 왼쪽을 연관관계의 주인으로 가정해서 분류합니다. 예를 들어 N : 1이면 N이 연관관계의 주인입니다.)
양방향 매핑에서 @OneToMany는 연관관계의 주인이 될 수 없습니다.
왜냐하면 관계형 DB의 특성상 1 : N입니다.
N : 1 관계는 항상 다 쪽에 외래 키가 있습니다.
따라서 @OneToMany, @ManyToOne 둘 중에는 연관관계의 주인은 항상 다 쪽인 @ManyToOne을 사용한 곳입니다.
이런이유로 @ManyToOne에는 mappendBy속성이 없습니다.
1 : N 양방향 매핑이 완전히 불가능한것은 아닙니다.
1 : N 단방향 매핑 반대편에 같은 외래 키를 사용하는 N : 1 단방향 매핑을 읽기 전용으로 추가하면됩니다.
public class Team {
@Id
@GeneratedValue
@Column(name = "TEAM_ID")
private String id;
private String name;
@OneToMany
@JoinColumn(mappedBy = "TEAE_ID")
private List<Member> members = new ArrayList<>();
}
public class Member {
@Id
@Column(name="MEMBER_ID")
private String id;
private String username;
@ManyToOne
@JoinColumn(name = "TEAM_ID", insertable = false, updatable = false)
private Team team;
// Getter, Setter...
}
1 : N(TEAM.members) 단방향 매핑 반대편에 N : 1 (MEMBER.team) 단방향 매핑을 추가했습니다.
이때 1 : N 단방향 매핑과 같은 TEAM_ID 외래 키 컬럼을 매핑했습니다.
이렇게 되면 둘 다 같은 키를 관리하므로 문제가 발생할 수 있습니다.
따라서 반대편인 N : 1 쪽은 insertable = false, updatable = false 로 설정해서 읽기만 가능하게 했습니다.
이 방법은 1 : N 양방향 매핑이라기 보다는 1 : N 단방향 매핑 반대편에 N : 1 단방향 매핑을 읽기 전용으로 추가해서 1 : N 양방향처럼 보이도록 하는 방법입니다.
1 : N 단방향 매핑이 가지는 단점을 그대로 가지게되서 될 수 있으면 N : 1 양방향 매핑을 사용하는것을 추천합니다.
'IT > JPA' 카테고리의 다른 글
주 테이블 외래 키 (0) | 2022.06.19 |
---|---|
일 대 일 [ 1 : 1 ] (0) | 2022.06.18 |
일 대 다 (0) | 2022.06.13 |
다 대 일 (0) | 2022.06.12 |
연관관계의 주인(mappedBy) (0) | 2022.06.11 |