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에 담던지..구워삶던지 알아서 잘 하면 된다.
끝