관계형 DB에서 FK가 있는게 1:다 에서 '다'가 된다. (당연한 이야기)
Member/Order간 연관관계의 주인은 FK가 있는 Order를 연관관계의 주인으로 하는 것이 좋다.
그러므로 Order.member를 ORDERS.MEMBER_ID 외래키와 매핑한다.
엔티티 설계시 주의점
1. 엔티티에는 가급적 Setter를 사용하지 않는다.
-> Setter가 모두 열려있으면 변경포인트가 너무 많아져서 유지보수가 어렵다.
2. 모든 연관관계는 지연로딩으로 설정한다.
연관관계 설정은 당연하겠지만 DB에 어떤 테이블과 FK키로 관련있는 테이블들이 있을 때 FK로 연관된 테이블들에서 join한 데이터들을 읽어와야 하는 필요성이 생긴 경우, JPA를 통하여 복잡한 SQL JOIN 구문 등을 사용자가 직접 작성하지 않아도 편리하게 이용할 수 있도록 지원이 되는 장점이 큰 듯 하다.
-즉시로딩(EAGER) 방식은 FK로 연관된 테이블들에서 모든 데이터를 읽기 때문에, 코드 실행 시 어떤 SQL이 실행되는지 추적하기 어려운 문제가 있다.
-또한, JPQL을 실행할 때 N+1 문제가 자주 발생한다.
-실무에서 모든 연관관계는 지연로딩(LAZY)으로 설정해야 한다.
-연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join이나 그래프 기능을 사용한다.
3. 컬렉션은 필드에서 초기화 한다.
- 컬렉션은 필드에서 바로 초기화 하는 것이 null 문제에서 안전하다.
댓글