(JPA) ManyToOne 연관관계에서 부모 Entity의 PK를 알 때에 연관관계를 설정하는 법

Yukicow·2024년 2월 3일
0
post-custom-banner

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에 꼭 만들어 둔다.

profile
자료를 찾다 보면 사소한 부분에서 궁금한 부분이 생기도 한다. 똑같은 복붙식 블로그 때문에 시간만 낭비되고 시원하게 해결하지 못 하는 경우가 많았다. 그런 부분들까지 세세하게 고민하고 함께 해결해 나가고자 글을 작성한다. 혼자서 작성하는 블로그가 아닌 함께 만들어 가는 블로그이다. ( 지식 공유를 환영합니다. )
post-custom-banner

0개의 댓글