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 단방향 관계 설정
감사합니다 :)
