Hibernate ORM 7.4.7이 JOINED 상속 쿼리와 2차 캐시 회귀를 수정한다

Hibernate ORM 7.4.7 릴리스, 공식 수정 이슈 목록

Hibernate ORM 7.4.7은 네 건의 공식 수정 이슈를 포함한다. 그중 HHH-20718은 JOINED 상속 계층을 대상으로 하는 @OneToOne 또는 @ManyToOne 연관 관계의 외래 키가 상위 테이블 열을 참조할 때 발생한다. Criteria나 JPQL로 이 경로를 탐색하면 조인 조건에 선언되지 않은 테이블 별칭이 들어가 쿼리가 실행 단계에서 실패했다. 7.4.1에서 재현된 이 문제는 상위 테이블이 실제로 사용된다는 정보를 조인 가지치기 단계까지 전달하는 방식으로 수정됐다.

HHH-20773은 @Immutable과 @Cacheable을 함께 쓰는 엔티티가 지연 로딩 @Basic 필드와 연관 관계를 동시에 가질 때 나타났다. 지연 필드를 포함하도록 설정한 2차 캐시가 있어도 필드 접근마다 데이터베이스 왕복이 발생했다. 이번 패치는 불변 엔티티의 지연 필드 값을 캐시 항목에 포함해 후속 로드가 2차 캐시에서 값을 가져오도록 고쳤다. 이는 결과 정확성보다 쿼리 수와 지연 시간에 드러나는 회귀이므로 기능 테스트만으로 놓치기 쉽다.

프로세서와 프레임워크 통합 경로도 바뀌었다. HHH-20720은 Hibernate processor가 Jakarta Data가 아닌 저장소에도 @Transactional을 복사하도록 수정하며, 공식 이슈는 Quarkus Data 저장소를 주요 영향 대상으로 명시한다. 세션과 stateless session을 다른 프레임워크가 감싸 쓸 수 있도록 delegator 기반 클래스와 테스트를 보강한 HHH-17990도 포함됐다. 공식 변경 기록은 앞의 세 항목을 버그로, HHH-17990을 개선으로 구분하며 보안 변경이나 전체 애플리케이션에 적용되는 호환성 파괴를 명시하지 않는다.

업그레이드 판단은 사용 중인 매핑을 먼저 좁히는 편이 안전하다. JOINED 상속 대상의 to-one 연관 관계가 상위 테이블 열을 참조한다면 실제 Criteria와 JPQL 쿼리를 실행하고 생성 SQL에 선언되지 않은 별칭이 없는지 확인해야 한다. 불변 캐시 엔티티에 지연 기본 필드와 연관 관계가 함께 있다면 첫 로드 뒤 통계를 초기화하고 같은 필드를 다시 읽어 추가 SQL이 발생하지 않는지 검증할 수 있다. Quarkus Data나 Hibernate processor 생성 저장소를 쓴다면 읽기와 쓰기 메서드의 트랜잭션 경계를 별도로 회귀 테스트하는 것이 이번 패치의 범위에 맞다.