Spring JPA [활용] Entity 설계시 주의점
Entity에는 가급적 Setter를 사용하지 말자
- Setter가 모두 열려있다 == 변경 포인트가 너무많아서, "유지보수"가 힘들다
모든 연관관계는 "지연로딩"으로 설정
- 즉시로딩("EAGER")은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다.
- 실무에서 모든 연관관계는 지연로딩("LAZY")로 설정해야 한다.
- !! (중요) @OneToMany는 default값이 "LAZY" 이지만, @ManyToOne, @OneToOne은 "EAGER"임으로 "직접" LAZY로 다 바꿔 줘야된다.
- @ X To One 시리즈는 다 LAZY로 바꿔줘야된다.
컬렉션은 필드에서 초기화 하자
- 컬렉션 (List,Map 등등)은 필드에서 바로 초기화 하는것이 안전하다.
- 예) List<> list = new ArrayList<>();
@Cascade
- 엔티티의 상태 변화를 전파시키는 옵션이다.
- persist(저장), remove(삭제)의 상태를 전파시킨다.
- OneToMany와 ManyToOne로 양방향 관계를 맺는 엔티티의 상태 변화를 전이시킬 때 사용한다.
연관관계 편의 메서드
- "양방향 연관관계" 를 맺을 때에는, 양쪽 모두 관계를 맺어주어야한다.
- 양쪽 모두의 관계를 맺어주는 것을 하나의 코드처럼 사용하는 것이 안전하다.