1. Entity에서는 가급적 Setter를 사용하지 않는 것이 좋다.
Setter를 사용하면 변경 포인트가 많아서 유지 보수가 어렵다.
즉, 특정 엔티티가 어디에서 수정된건지 파악하지 힘들어서 유지보수가 힘들다
2. 모든 연관 관계는 지연로딩(LAZY)으로 설정하는게 좋다.
- 즉시로딩(Eager)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다.
- 실무에서는 모든 연관관계는 LAZY로 설정해야한다.
- 연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join 또는 엔터티 그래프 기능을 사용한다.
- • @XToOne(OneToOne, ManyToOne) 관계는 default값 이 EAGER(즉시로딩)이므로 지연로딩으로 설정해야 한다.
3. 컬렉션은 필드 레벨에서 초기화하는 것이 안전하다.
@OneToManmy(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
- null 문제에서 안전하다.
- Hibernate는 엔터티를 영속화 할 때, 컬렉션을 감싸서 Hibernate가 제공하는 내장 컬렉션으로 변경된다. 임의의 메서드에서 잘못 생성하면 Hibernate 내부 메커니즘에 문제가 발생 할 수 있다.
Member member = new Member();
System.out.println(member.getOrders().getClass());
em.persist(team); // 영속화 한다(db에 저장한다) -> 영속성 컨텍스트를 관리해야한다.
System.out.println(member.getOrders().getClass());// 값이 바뀌어있다.
// 출력결과
class java.util.ArrayList
class or.hibernate.collection.internal.PersistentBag
질문
영속성 컨텍스트란 무엇인가요?애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.
-> 엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있고, 영속성 컨텍스트를 관리할 수 있음
엔티티를 영구 저장하는 환경이다.
출처:
https://data-make.tistory.com/609
[Data Makes Our Future]
'개발일지 > JPA' 카테고리의 다른 글
JPA 인덱스 걸기 (0) | 2022.09.26 |
---|---|
JPA 사용 시 쿼리 방식 선택 권장 순서(컬렉션 조회 할 때) (0) | 2022.08.14 |
JPA 사용 시 쿼리 방식 선택 권장 순서(컬렉션 조회 안할 때) (0) | 2022.08.03 |
@JsonIgnore 사용과 지연로딩 에러 (0) | 2022.08.01 |
다양한 연관관계 매핑 (0) | 2022.07.07 |