1.6 KiB
1.6 KiB
배치는 부모를 먼저 페이징하고 자식을 IN으로 따로 가져온다
Alternative text
조회 코드, Hibernate 세션, feed_items, highlights 네 참여자 사이에서 부모 페이징이 먼저 일어나고 그다음 자식 IN 배치 조회가 일어나는 순서도.
Long description
조회 코드가 부모 페이지를 요청하면 세션이 feed_items에 부모만 LIMIT으로 조회한다. 돌아온 부모에는 초기화되지 않은 컬렉션 프록시가 붙어 있다. 세션은 그 프록시를 batch fetch size만큼 모아 highlights를 WHERE fk IN 으로 조회하고, 받은 자식 행으로 컬렉션을 채워 조회 코드에 돌려준다.
Elements and evidence
- 조회 코드 (actor): 페이지를 요청하는 애플리케이션 코드 Evidence: L1009–L1010.
- Hibernate 세션 (service): default_batch_fetch_size로 프록시를 모으는 주체 Evidence: L1010–L1012.
- feed_items (store): 부모 테이블 Evidence: L1009–L1010.
- highlights (store): 자식 테이블 Evidence: L1010–L1011.
Relationships
- 조회 코드 → Hibernate 세션: 부모 페이지 요청. Evidence: L1009–L1010.
- Hibernate 세션 → feed_items: 부모 LIMIT 페이징. Evidence: L1009–L1010.
- feed_items → Hibernate 세션: 페이지 부모 + 미초기화 프록시. Evidence: L1010–L1012.
- Hibernate 세션 → highlights: WHERE fk IN (?,…) 배치. Evidence: L1010–L1012.
- highlights → Hibernate 세션: 자식 행. Evidence: L1010–L1011.
- Hibernate 세션 → 조회 코드: 부모 + 컬렉션. Evidence: L1012–L1014.