반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 빈 타입 조회
- SOLID원칙
- 팩토리 패턴
- 옵저버 패턴
- @Tranctional
- 스프링 컨테이너
- mvvm패턴
- 백준 2164
- www.naver.com치면 발생하는일
- 스프링 빈
- 리버스 프록시
- 쇠막대기
- 싱글톤 패턴
- 참조형 매개변수
- 스프링
- 전략 패턴
- 후위표기식
- removeAll
- 스프링 싱글톤
- 네트워크
- 팩토리패턴
- 백준 1935
- Class Loader
- 기본형 매개변수
- 참조형 반환타입
- 포워드 프록시
- TCP/IP 4계층
- try-catch
- 자바의 면접
- k번째큰수
Archives
- Today
- Total
스파이더 웹 개발
다양한 연관관계 매핑 본문
728x90
반응형
분류
다 대 일 : @ManyToOne
일 대 다 : @OneToMany
일 대 일 : @OneToOne
다 대 다 : @ManyToMany
테이블은 외래키 하나로 두 테이블이 연관관계를 맺는다. 그러나 객체의 경우는 양방향에서 참조가 2군데 있는데, 둘 중 테이블의 외래키를 지정해주어야 한다. 각 분류에서 누가 연관관계의 주인이 되는지에 대해 알아보자. 왠만하면 테이블과 매핑 되는 객체를 연관관계의 주인으로해주자. 일대다 단방향 관계라고하면 다대일 양방향으로 개선해보자
다 대 일
다 대일 에서는 다 쪽인 Member가 연관관계의 주인이 되어, Membr 객체가 테이블의 외래키를 관리한다
@Setter
@Getter
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String name;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
public Member(){
}
}
일 대 다
일대다 관계에서는 1인 Team 객체가 연관관계의 주인이며, Team객체라 테이블의 외래키를 관리한다
근데 이러한 경우 Team 객체가 Member 테이블의 외래키의 주인이기에, Update 쿼리가 한번더 실행이 된다
@Setter
@Getter
@Entity
public class Team {
@Id @GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
@OneToMany
@JoinColumn(name = "Team_ID")
private List<Member> members = new ArrayList<>();
}
일 대 일
주 테이블이나 대상 테이블 중에 외래키를 선택할 수 있다.
일대일 관계는 다대일 연관관계와 유사하다
@Setter
@Getter
@Entity
public class Locker {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToOne(mappedBy = "locker")
private Member member;
}
@Setter
@Getter
@Entity
public class Member {
//기존 동일
@OneToOne
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
}
다 대 다
관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 가없기에 연결테이블을 추가해서 일대다, 다대일 관계로 해결해야한다
728x90
반응형
'JPA' 카테고리의 다른 글
프록시와 연관관계 관리 (0) | 2022.09.16 |
---|---|
고급 매핑 (0) | 2022.09.07 |
연관관계 매핑 (0) | 2022.08.30 |
엔티티 매핑 (0) | 2022.08.28 |
JPA 실행 중 발생 한 오류 (0) | 2022.08.26 |
Comments