IT-BackEnd/JPA

JPA - @OneToMany 단방향 쓰지 않는 이유

onfact 2023. 11. 23. 21:59

JPA에서 OneToMany는 보통 추천하지 않는 방법입니다.

 

그 이유는 여러가지가 있습니다만, 

Hibernate에서의 성능 이슈가 주된 원인중 하나로 생각되네요.

 

JPA의 단방향 @OneTomany 관계를 맺게되면 내부적으로 

@JoinColum이나 @JoinTable을 사용하여 외래 키를 관리합니다.

즉, OneToMany 관계에서는 JPA 내부적으로 JoinTable을 만들어서

JoinColumn을 생성, 관리함으로서

성능저하 및 관리포인트 증가라는 이슈를 만들어 냅니다.

 

토이 프로젝트로 진행하고 있는 ERD의 일부를 공유 드리자면,

 

※ 샘플 ERD

 

※ 1:N 구조 JPA 실행 결과 

 select
        p1_0.owner_owner_id,
        p1_1.pet_id,
        p1_1.breed,
        p1_1.created_at,
        p1_1.owner_id,
        p1_1.pet_birth_date,
        p1_1.pet_name,
        p1_1.pet_type,
        p1_1.updated_at 
    from
        owner_pets p1_0 
    join
        pet p1_1 
            on p1_1.pet_id=p1_0.pets_pet_id 
    where
        p1_0.owner_owner_id=?

 

결과적으로 owner_pets 라는 의도치 않은 테이블을 JPA에서 내부적으로 생성합니다.

해당 테이블은 Owner와 Pet의 연관 관계를 나타내는 테이블로 불필요한 테이블이죠.

 

※ 해결방법 

1. OneToMany, ManyToOne 양방향 관계 설정 

2. ManyToOne 단방향 관계 설정 

 

감사합니다 :)