엔티티에는 가급적 Setter를 사용하지 말자
- Setter가 모두 열려있다면, 변경 포인트가 너무 많아서 유지보수가 힘들다.
모든 연관관계는 지연로딩으로 설정! (외워야함! 중요!)
- 즉시로딩(EAGER)은 예측이 어렵고 어떤 SQL이 실행될지 추적하기가 어렵다. 특히 JPQL을 실행할때 N+1문제가 자주 발생한다.
- 실무에서는 모든 연관관계를 지연로딩(LAZY)로 설정해야 한다.
- 연관된 엔티티를 함께 DB에서 조회해야 하면 'fetch join'또는 엔티티 그래프 기능을 사용한다.
- @XToOne(OneToOne, ManyToOne)관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야한다.
컬렉션은 필드에서 초기화하자
- 컬렉션은 필드에서 바로 초기화 하는것이 안전하다.
private List<OrderItem> orderItems = new ArrayList<>(); //ex
- null 문제에서 안전하다.
- 하이버네이트는 엔티티를 영속화 할 때, 컬렉션을 감싸서 하이버네이트가 제공하는 내장 컬렉션으로 변경한다. 만약 getOrders() 처럼 임의의 메서드에서 컬렉션을 잘못 생성하면 하이버네이트 내부 메커니즘에 문제가 발생할 수 있다. 따라서 필드레벨에서 생성하는것이 가장 안전하고, 코드도 간결하다.
출처 : 인프런 | 김영한 실전! 스프링부트와 JPA활용편
'코딩조각' 카테고리의 다른 글
[javascript] Javascript에서 자주나오는 'this'란 뭘까 (0) | 2024.04.26 |
---|---|
[Java] 다형성에 대해 알아보자(feat.다형적 참조, 메서드 오버라이딩) (0) | 2024.02.22 |
[java] static 메서드 사용법(주의점) (0) | 2023.12.11 |
[java] java는 항상 변수의 값을 복사해서 대입한다 (1) | 2023.12.07 |
[Docker] docker Got permission denied while trying to connect to the Docker daemon socket 에러 해결하기 (0) | 2023.11.07 |