Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- JavaScript
- jpa
- 자바
- oracle
- java
- 오라클
- web
- 디자인 패턴
- Next.js
- jsp
- 자바스크립트
- 서버
- BACK-END
- node.js
- SQL
- 백엔드
- 스프링
- 데이터베이스
- 코드테스트
- 정리
- 프런트엔드
- 코드 테스트
- 프로그래머스
- 쿼리
- 미니정리
- spring
- 스프링부트
- 프론트엔드
- 알고리즘
- MySQL
Archives
- Today
- Total
참치코더의 꿈 메모장
JPA / 일대일(OneToOne) 매핑, 다대다(ManyToMany) 매핑(코드 위주) 본문
728x90

|
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
// 일대일(OneToOne)
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "LOCKER_ID") // FK가 Member 테이블에 생성됨
private Locker locker;
}
@Entity
public class Locker {
@Id
@GeneratedValue
private Long id;
private String name;
}
// 외래키는 Member 테이블에 존재 (LOCKER_ID)
// LOCKER에서는 Member에 접근 불가 (단방향)
// 양방향 일대일 (OneToOne 양방향)
@Entity
public class Member {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "LOCKER_ID") // FK가 Member 테이블에 생성됨
private Locker locker;
}
@Entity
public class Locker {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToOne(mappedBy = "locker") // 주인이 아니다
private Member member;
}
// 다대다(ManyToMany)
// 다대다는 그냥 @ManyToMany로 만들수 있긴한데... 실무에서는 사용하지 못한다.
// @JoinTable을 써서 새로운 테이블에 조인 컬럼 하는 방법도 있는데 이것도 사용하면 안된다.
// (해당 테이블에 새로운 값을 넣지 못하기 때문 진짜 양쪽 테이블의 id 기본키만 들어간다.)
// 그래서 중간 테이블을 1개더 만든 뒤 1:多, 多:1 테이블을 만들어서 (기본키는 자동 생성 키) 관리를 해야한다.
@Entity
public class MemberTeam {
@Id @GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
@ManyToOne // 단방향 매핑
@JoinColumn(name = "TEAM_ID")
private Team team;
private LocalDate joinedDate; // 추가 정보 가능
}
@Entity
@Getter
@Setter
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "MEMBER_ID")
private Long id;
@OneToOne(mappedBy = "member")
private Locker locker;
@Column(name = "USERNAME")
private String username;
@ManyToOne
@JoinColumn(name = "TEAM_ID", insertable = false, updatable = false)
private Team team;
@OneToMany(mappedBy = "member") // 양방향 매핑
private List<MemberProduct> memberProducts = new ArrayList<>();
}
@Entity
@Setter
@Getter
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
|
cs |
728x90
'JPA' 카테고리의 다른 글
| JPA / @MappedSuperclass, 프록시 개념 정리 (0) | 2025.10.15 |
|---|---|
| JPA / 상속관계 매핑 (SINGLE_TABLE, JOINED, TABLE_PER_CLASS) (1) | 2025.10.13 |
| JPA / 일대다(oneToMany) 관계 매핑 정리 (0) | 2025.10.09 |
| JPA - 양방향 매핑 과 설정 방법 정리 (0) | 2025.10.08 |
| JPA / 단방향 엔티티 연관관계(多 : 一) 정리 (0) | 2025.10.06 |
Comments