์บก์คํค ์ค๊ณ๋ฅผ ํ๋ฉด์ ํด์ํ๊ทธ ๊ธฐ๋ฅ์ ๊ตฌํํ์ด์ผ ํ๋๋ฐ ์ด๋ป๊ฒ ์ค๊ณ๋ฅผ ํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด ๋์๋ค..๐ค
๋ด๊ฐ ๊ณ ๋ฏผํ๋ ๊ฒ
๐ธ ๊ธ์ ์ฌ๋ฌ ๊ฐ์ ํด์ํ๊ทธ๋ฅผ ๊ฐ์ง ์ ์๋ค.
๐ธ ํด์ํ๊ทธ๋ ์ฌ๋ฌ ๊ธ์ ์ฌ์ฉ ๋ ์ ์๋ค.
๐ ๊ทธ๋ผ DB ์์ ๋ค์์ ๋์ฒ๋ผ N:M ๊ด๊ณ๋ฅผ ์จ์ผ ํ๋...?๋ผ๊ณ ๊ณ ๋ฏผํ์ง๋ง N:M๊ด๊ณ๋ ์ ๋์ ๋์ ๋ ์ฌ์ฉํ๋ฉด ์ ๋๋ค๊ณ ํด์ ๋ฐฉ๋ฒ์ ์ฐพ์๋ดค๋ค!
โ๏ธ ๋ค๋๋ค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ๋จ์ํด์ง๊ณ ํธ๋ฆฌํ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ์ํฐํฐ์ ์ฌ๋ฌ ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋๋๋ฐ ์ถ๊ฐํ ์นผ๋ผ๋ค์ ๋งคํํ ์ ์๋ค๊ณ ํ๋ค..! ๊ฒฐ๊ตญ @ManyToMany๋ฅผ ์ฌ์ฉํ์ง ๋ชปํจ..
ํด๊ฒฐํ ๋ฐฉ๋ฒ
๐ธ ์ผ๋๋ค, ๋ค๋์ผ ๊ด๊ณ๋ฅผ ๋ง๋ค์!
๐ธ ๋งคํ ์ํฐํฐ๋ฅผ ๋ง๋ค์ด ๊ธ๊ณผ ๋งคํ์ํฐํฐ๋ ์ผ๋๋ค, ๋งคํ์ํฐํฐ์ ํด์ํ๊ทธ๋ ๋ค๋์ผ ๊ด๊ณ๋ก ์ค๊ณํ๋ค.
DB ์ค๊ณ
JPA ์ค๊ณ
Board
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Board extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "board_id")
private Long id;
@Column(name = "title", nullable = false)
private String title;
@Column(name = "content", nullable = false)
private String content;
@OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true)
private List<TagMapping> tagMappings;
}
orphanRemoval์ ๊ณ ์ ๊ฐ์ฒด๋ฅผ ์ญ์ ์์ผ์ฃผ๋ ์ญํ ์ ํ๋ค!
TagMapping
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class TagMapping extends BaseTimeEntity {
@Id
@GeneratedValue
@Column(name = "TagMapping_id")
private Long id;
@ManyToOne
@JoinColumn(name = "board_id")
private Board board;
@ManyToOne
@JoinColumn(name = "tag_id")
private Tag tag;
}
Tag
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Tag extends BaseTimeEntity {
@Id
@GeneratedValue
@Column(name = "tag_id")
private Long id;
@Column(name = "word", nullable = false)
private String word;
@OneToMany(mappedBy = "tag", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
private List<TagMapping> tagMapping;
}
๋๋์
๐ธ ์ด๋ ๊ฒ ํ๋๊น ๊ด๋ฆฌ๊ฐ ํธํ ๊ฒ ๊ฐ์ ๋๋์ด ๋ค์๋ค! ํน์ ํด์ํ๊ทธ๋ก ๊ฒ์ํ ๋๋ ์กฐ์ธ์ ์ฌ์ฉํด์ ๊ธ์ ์ฐพ๋ ๊ธฐ๋ฅ๋ ์ ๋๋ ๊ฑธ ํ์ธํ๋ค. ์ ํ๊ฑด์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋์ค์ ๋ ํด๋ณผ ์ผ์ด ์๋ค๋ฉด ์ข ๋ ๋๋ฒจ๋กญํด๋ณด๊ณ ์ถ๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Dirty Checking(๋ํฐ ์ฒดํน) ์ด๋? (0) | 2023.10.27 |
---|---|
[Spring] Service, ServiceImpl ๊ตฌ์กฐ (0) | 2023.06.30 |
[Spring] MultipartFile, Dto ํ๋ฒ์ ์ ๋ ฅ ๋ฐ๊ธฐ | swagger | S3 (0) | 2023.02.14 |
[Spring][Redis] RedisConnectionException : NOAUTH Authentication required ์๋ฌ (0) | 2023.02.10 |
SpringBoot [Bean Validation] (0) | 2022.07.21 |