Tech/JPA
[JPA] 다대일(ManyToOne) 연관관계에 대해 간단히 알아보자.
싱브이
2024. 4. 10. 11:14
728x90
반응형
연관관계 결정
데이터베이스의 테이블을 설계할 때 PK를 가진 테이블을 먼저 설계하고. FK로 사용하는 테이블을 설계하는게 일반적이다.
근데 객체지향을 이용하는 JPA는 방향성을 결정하는 것이 어렵다. 그래서 아래와 같은 기준을 적용하는 것이 좋다.
- 연관 관계의 기준은 변화가 많은 쪽을 기준으로 결정
- ERD의 FK를 기준으로 결정
1. 변화가 많은 쪽을 기준
조금이라도 더 자주 변화가 있는 쪽으로 판단하는 것이 편리하다.
예)
회원 - 게시물 관계에서 회원의 활동에 의해 여러 개의 게시물이 만들어지므로 연관 관계의 핵심은 게시물로 판단하는 것이 편하다.
2. ERD 상에서 FK 기준
ERD에서 JPA의 연관 관계를 읽을 때는 FK를 판단해서 읽는것이 편리하다.
단방향과 양방향
관계형 데이터베이스는 특정한 PK를 다른 테이블에서 FK로 참조해서 사용한다.
하지만, 객체지향은 A가 B의 참조를 가질 수도 있고, B가 A의 참조를 가질 수도 있다.
- 양방향 : 양쪽 객체 모두 서로 참조를 유지한다.
- 단점 : 모든 관리를 양쪽 객체에 동일하게 적용해야한다.
- 장점: 필요한 데이터를 탐색하는 작업이 편리함
- 단방향: 한쪽만 참조를 유지한다.
- 단점 : 조인처리가 어려움
- 장점: 구현이 단순하고, 에러 발생의 여지를 줄일 수 있다.
그래서 나는 단방향을 이용하고, 필요에 따라 JPQL을 이용하여 조인처리하기로 함!
@ManyToOne
- @ToString을 할 때 참조하는 객체를 사용하지 않도록 exclde 를 지정할 것
@ToString(exclude = "객체")
- .FetchType 설정
.LAZY : 지연로딩, 필요한 순간까지 데이터베이스와 연결하지 않는 방식
.EAGER : 즉시 로딩, 해당 엔티티를 로딩할 때 같이 로딩하는 압식
EAGER은 성능에 영향을 줄 수 있으므로 LAZY를 기본으로 사용한다.
728x90
반응형