안녕하세요 초보개발자 명아주입니다.
배치를 사용하지 않고, 직접 IN 쿼리를 만들어주게 한번 해봤습니다.
이렇게 하면 실제 쿼리가 2번 나가게 됩니다.
조금더 복잡하긴 하지만, jpa 를 잘 모르는 사람이 보기엔 이해하기 더 좋지 않을까 싶습니다.
단점은 2번째 쿼리가 좀 크게 나가는 점과 distinct 문제, 배치 사이즈의 한계같은 부분이 없다는 것이라고 생각합니다.
public List<Order> findAllWithPaging(int offset, int limit) {
List<Long> ids = em.createQuery("select o.id from Order o", Long.class)
.setFirstResult(offset)
.setMaxResults(limit)
.getResultList();
return em.createQuery("""
select distinct o from Order o
join fetch o.member
join fetch o.delivery
join fetch o.orderItems oi
join fetch oi.item
where o.id in :ids
""", Order.class)
.setParameter("ids", ids)
.getResultList();
}
비슷한게 뒤에서 나오는군요..
답글
김영한
2022.02.07그래도 직접 코드로 해보신 덕분에 더 많이 배우셨겠어요^^
명아주
2022.02.07넵 맞습니다!