다대다 관계일 때 @ManyToMany 와 @JoinTable로 중간테이블을 생성하여 매핑하는 방법은 추천하지 않는다고 한다.
그 이유는 필수적인 정보 외에도 필요없는 정보들 까지 중간테이블에 담길수도 있기 때문이다. 이는 효율성이 떨어지고 노출되어서는 안되는 정보들이 노출될 위험이 생긴다.
그래서 중간테이블 Entity를 직접 생성하여 @ManyToOne을 이용해 양쪽으로 매핑해주는 방법을 사용한다.
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class BoardUsers{
@EmbeddedId
private BoardUsersPK boardUsersPK;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "board_id")
@MapsId("boardId")
private Board board;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
@MapsId("userId")
private User user;
@Builder
public BoardUsers(Board board, User user){
this.board = board;
this.user = user;
this.boardUsersPK = BoardUsersPK.builder()
.boardId(board.getId())
.userId(user.getId())
.build();
}
}
'개발일지' 카테고리의 다른 글
20231228 - 스프링 S3 사용하기 (1) | 2023.12.29 |
---|---|
20231227 - 예외처리 (0) | 2023.12.27 |
20231226 - 프로그래머스/140108 (0) | 2023.12.26 |
20231221 - cascade, orphanRemoval (1) | 2023.12.21 |
20231220 - 프로그래머스/131128 (0) | 2023.12.20 |