이 글은 김영한 님의 실전! 스프링 부트와 JPA 활용-1 강의를 참고하여 작성한 글입니다.
Setter가 열려있으면, 데이터가 변경될 수 있는 지점이 너무 많아서 유지보수가 어려워진다.
FetchType.Lazy)으로 설정하자FetchType.EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. N+1 문제가 자주 발생한다.FetchType.Lazy를 한다고 N+1 문제가 발생하지 않는 것은 아니다. 참조FetchType.LAZY)은 연관관계에 있는 객체를 프록시 객체로 바인딩하여 실제로 해당 객체가 직접 호출된 시점에 쿼리를 실행하는 장점이 있다.OneToOne, ManyToOne 관계는 기본값이 즉시로딩이므로, 지연로딩으로 변경해주자.Entity가 View나 Controller와 같은 세션의 영역에서 수정될 때, LazyInitializationException이 발생하기도 한다. 이 경우, OSIV를 적용하여 해결할 수 있다. 참조NullPointerException을 막을 수 있다. (안전하다)Entity에서 persist() 메서드를 호출하면, 컬렉션을 감싸서, 자체적으로 제공하는 내장 컬렉션(PersistentBag)으로 변경하여 저장한다. 만약, Setter 메서드로 컬렉션 필드를 강제로 수정하면 Hibernate 내부 메커니즘에 장애를 발생시킬 수 있다.