15-J4. DB → EntityManager: ResultSet 반환
SQL이 실행되면 DB는 JDBC ResultSet을 돌려주고, Hibernate는 이를 감싸서 이후 매핑 단계로 넘깁니다.
이 단계는 “DB가 응답했다”는 사실을 코드로 확인할 수 있는 구간입니다.
이번 단계의 역할
DB가 반환한 JDBC 결과를 Hibernate가 수령해 내부 결과 처리 파이프라인으로 연결합니다.
아직 Entity로 바뀐 것은 아니고, 우선 ResultSet이 확보된 상태입니다.
호출 흐름 요약
executeQuery()가 완료됩니다.- Hibernate가
ResultSet을wrapResultSet(...)으로 감쌉니다. - 결과 집합을 리소스 레지스트리에 등록합니다.
- 다음 단계에서
RowReader와 결과 소비기가 엔티티 매핑을 시작합니다.
호출 흐름 다이어그램
sequenceDiagram
participant DB
participant RS as DeferredResultSetAccess
participant Hibernate
DB-->>RS: ResultSet
RS->>RS: wrapResultSet(resultSet)
RS->>Hibernate: register(resultSet, preparedStatement)
핵심 코드
// DeferredResultSetAccess.java
resultSet = wrapResultSet(preparedStatement.executeQuery());
skipRows(resultSet);
logicalConnection.getResourceRegistry().register(resultSet, preparedStatement);
코드 해설
이 지점은 DB가 데이터를 돌려준 직후입니다.
하지만 JPA 사용자는 아직 Entity를 받지 않았고, Hibernate 내부에서는 이제 막 JDBC 결과를 후속 처리 대상으로 넘긴 상태입니다.
설계 의도
JDBC 결과와 엔티티 매핑 단계를 분리해서, 실행 단계와 매핑 단계를 독립적으로 관리하려는 구조입니다. 덕분에 Hibernate는 결과 집합 처리, 캐싱, 통계, 행 변환을 별도의 파이프라인으로 다룰 수 있습니다.
다음 단계 연결
다음 문서 15-J5에서는 이 ResultSet이 Hibernate 내부에서 Entity로 매핑되는 과정을 봅니다.
← 이전: 15-J3. EntityManager → DB | 다음: 15-J5. EntityManager → JpaRepository