본문 바로가기

개발일지

20231226 - 다대다 관계와 중간테이블

다대다 관계일 때 @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