Entity에는 가급적 Setter를 사용하지 말자
모든 연관관계는 지연로딩으로 설정👀👀
즉시 로딩은 예측이 어렵고 어떤 SQL이 실행될지 추적하기 어렵다. JPQL을 실행할 때 N+1문제가 자주 발생한다.
EAGER(즉시 로딩)으로 되어있으면, 조회할 경우 연관된 데이터를 다 끌고 온다.
연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join 또는 엔티티 그래프 기능을 사용해아 한다.
@...ToOne(OneToOne, ManyToOne)관계는 기본이 즉시 로딩이므로 지연로딩으로 바꿔줘야 한다.
컬렉션은 필드에서 초기화를 하자
null 문제에서 안전하다.
하이버네이트는 엔티티를 영속화 할 때, 컬렉션을 감싸서 하이버네이트가 제공하는 내장 컬렉션으로 변경한다. 컬렉션을 꺼내서 변경하게 되는 경우 하이버네이트의 메커니즘 대로 동작하지 않을 수 있다. 따라서 컬렉션을 변경하지 않는 것이 좋다.
테이블, 컬럼명 생성 전략
하이버네이트 기존 구현: 엔티티의 필드명을 그대로 테이블 명으로 사용(SpringPhysicalNamingStrategy)
스프링 부트 신규 설정(엔티티(필드) > 테이블(컬럼))
1. 카멜 케이스 > 언더스코어(orderDate > order_date)
2. .(점) > (언더스코어)
3. 대문자 > 소문자