JPA에서 ManyToOne에 해당하는 Entity를 DB에 저장할 때에는 부모 Entity를 초기화 해두어야 한다.
이는 자식 Entity가 부모 Entity의 유니크값을 FK로 가져야 하기 때문이다.
팀 프로젝트를 진행하던 중 팀원분들이 Parameter로 부모 Entity의 PK를 받아 연관관계를 설정하고 있는 코드를 본 적이 있다.
public void saveMember(Long teamId){
Team team = teamRepository.findById(teamId)
.orElseThrow()
Member member = new Member(team);
}
Team 엔티티의 PK를 받아와 Repository로부터 조회하고 해당 엔티티를 Member엔티티 생성에 사용하는 형태였다.
이거 DB에서 조회 안 해도 돼요!
필자가 위 코드를 보고 팀원에게 한 말이었다.
JPA에서 연관관계 설정을 위해 DB를 꼭 조회할 필요가 없다.
필자는 당연하게 사용하고 있던 방식이었는데, 팀원분들에게는 그렇지 않은 듯 했다.
효율적으로 연관관계를 설정하는 방법이 있는데 이러한 방법을 모르는 분들이 또 있을 것 같아 도움이 되고자 글을 작성하기로 했다.
JPA에서 부모 Entity의 PK를 알고있다면 해당 PK를 주입받은 Entity를 직접 만들어서 연관관계를 설정하고자 하는 Entity에 주입할 수 있다!
코드를 보면 바로 이해가 될 것이다. 위의 코드를 이렇게 바꿀 수 있다.
public void saveMember(Long teamId){
Team team = new Team(teamId)
Member member = new Member(team);
}
훨씬 간편하고 Id를 통해 DB에 조회쿼리가 나가지 않는다는 점에서 매우 효율적이다.
필자는 언제든지 PK값을 알 때에 위와 같은 방법으로 연관관계를 설정해 주기 위해 Id값만 초기화하는 생성자를 Entity에 꼭 만들어 둔다.