JPA - oneToMany & ManyToOne 양방향 설정

namkun·2021년 7월 11일
0

jpa

목록 보기
1/1

API 를 만들어보다가 JPA를 사용할 일이 있었는데, 아주 단순하게 하나의 사람에 대해 여러 답변을 가져와야하는 경우가 있었다.
고로, 1:N의 관계가 있는 테이블에 대해서 데이터를 가져올 일이 있었는데, 이번에 처음 해보다가 머리가 잠시 빠개졌던걸 정리해보고자 한다.

구조는 간단하게 보면 다음과 같다.

table name : User
pk : id

table name : Answer
pk : id
fk : user_id

user 의 pk인 id가 Answer의 fk인 user_id 로 들어가 있는 상황.

이때 User, Answer의 Entity에 다음과 같이 하나하나 설정해준다.

User.java

@OneToMany(mappedBy = "answer")
private List<Answer> answerList = new ArrayList<>();

여기서 보이는 mappedBy는 두 엔티티 사이가 양방향 관계라는 것을 지정해주는 값이라고 보면 된다. 해당 값이 없으면 JPA 에서 두 엔티티가 양방향 관계라는 것을 모르고 두 엔티티의 매핑 테이블을 각각 생성한다.
여기서 지정된 answer이라는 값은 @ManyToOne에 지정된 변수값이라고 생각하면 된다.

Answer.java

@ManyToOne
@JoinColumn(name = "user_id")
private Answer answer;

여기서는 다대일 관계를 정의한다고 생각하면 된다.
@JoinColumn은 어떤 컬럼이 join되는 column인지 지정하는 것인데, 여기서는 FK인 user_id를 지정했다.

이렇게 하고 User 엔티티를 가져오면....

같이 List<Answer>를 User와 함께 같이 가져온다.
이제 DTO에 담던지..구워삶던지 알아서 잘 하면 된다.

profile
개발하는 중국학과 사람

0개의 댓글