관리 메뉴

민우의 코딩노트

SpringBoot JPA - @ManyToOne 사용하기 본문

Knowledge/Spring

SpringBoot JPA - @ManyToOne 사용하기

미미누 2022. 1. 27. 18:50

@ManyToOne 어노테이션을 통해 다른 테이블에서 FK를 참조하여 사용할 수 있다.

@ManyToOne은 단방향 다대일[N:1] 연관관계 매핑을 나타낸다.

 

테이블은 FK(외래 =키)를 통해서 두 테이블이 연관관계를 맺게 되는데,

객체 양방향 관계(테이블 둘 다 참조하는 경우) 외래 키를 관리하는 곳을 지정해야 한다.

 

다대일 (@ManyToOne)의 경우 외래키를 관리하는 곳이 N이므로, 연관관계의 주인이 된다.

 

내가 관리하는 Post 테이블에서는 user의 PK인 Id 값과, category의 키 값인 id 값이 필요하다.

이때 @ManyToOne(fetch = LAZY)를 각각 FK에 추가하고, @JoinColumn(name)을 이용해 연관관계 매핑이 가능하다.

 

 

참조하고 싶은 Category 엔티티

 

참조하고 싶은 User 엔티티

그러면 어떻게 User와 Category에 값을 넣을까 궁금한데, JPA 프로젝트에서는 Entity 부분과 Dto 부분으로

나누어진다. Entity와 Dto로 나누어 데이터를 처리한다.

 

PostController

내가 맡은 Post의 경우, Controller 부분에서 dto(PostRequestData)를 통해

userId, CategoryId가 들어있는 데이터를 유저로 부터 입력 받는다.

 

PostRequestData
빌더 패턴을 적용하여 PostRepository에 저장하는 PostService 로직

 

PostController로 부터 Dto 데이터를 받아, PostService로 넘기고,

다른 Service 로직(UserService, CategoryService)에서 User와 category를 받는다.

 

그리고 postService 로직에서 Post 데이터를 저장하였다.

단순히 category와 user는 객체 그대로 저장하고,

category의 id값과 user의 id값을 쓰고 싶을때, 빌더 패턴을 이용해서 받아와서 사용하면 된다.