1. Global Fetch 전략 수정
가장 간단한 방법으로 글로벌 페치를 fetch = FetchType.EAGER
로 잡아주면 즉시로딩을 하기 때문에 지연 로딩에 대한 문제가 발생하지 않는다.
단점
해당 엔티티가 필요없는 경우에도 무조건 로딩한다.
N+1 Problem 발생 가능성
2. JPQL 페치 조인
기존
//JPQL
select o from Order o
//SQL
select * from order
JPQL 페치 조인 사용
//JPQL
select o from Order o join fetch o.orderItem
//SQL
select o.*, i.* from Order o join OrderItem i on o.orderItemId = i.orderItemId
3. 강제 초기화
트랜잭션이 살아있는 영역 내에서 필요한 시점에 초기화를 한다.
public Order findOrder(){
//프록시 객체 강제 초기화
Order order = orderRepostiory.findOne(1L);
order.getOrderItem().getName();
//또는 하이버네이트 메소드 사용
Hibernate.initialize(order.getOrderItem());
}
'Development > DB, JPA' 카테고리의 다른 글
Is Redis-connection-pooling necessary ? (lettuce) (0) | 2020.03.22 |
---|---|
DBCP maxLIfeTime Issue (0) | 2020.02.09 |
스프링 JPA 그리고 LazyInitializeException (0) | 2017.03.23 |
NULL 제약 조건과 조인 전략 (0) | 2017.03.21 |
JPA를 이용한 다대일 객체 관계 매핑 (0) | 2017.03.17 |