변경 포인트가 많아 유지보수 어려움
즉시로딩은 N+1 문제 발생
연관된 엔티티를 함께 DB에서 조회할 경우, fetch join 또는 엔티티 그래프 기능 사용
@XToOne 기본값이 즉시로딩. 지연로딩으로 변경
null 문제에서 안전
List<Member> members = new ArrayList(); //초기화 후
// members 자체를 변경할 수 있는 setter 제공 X
public void setMember(List<Member> members) {
this.members = members;
}
하이버네이트 기존 구현: 엔티티의 필드명을 그대로 테이블의 컬럼명으로 사용
but, 스프링 부트에서 하이버네이트 기본 매핑 전략을 변경하여 아래처럼 사용
참고)
논리명 적용 (명시하지 않을때)
spring.jpa.hibernate.naming.implicit-strategy
물리명 적용
spring.jpa.hibernate.naming.physical-strategy
//필드 주입
@Autowired
MemberRepository memberRepository;
//생성자 주입 ★권장
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
필드 주입의 경우 변경하기 힘듦
-> setter를 만들면? 도중에 변경되면 안 됨, 또한 생성 이후에는 딱히 변경할 일 없음
생성자 주입시
그래서! 생성자 주입 사용
@RequiredArgsConstructor 롬복 애노테이션 사용시 더욱 편리!