Hibernate ORM 7.4.8이 복합 매핑 오류를 줄였다
@Any와 필터, 상속 매핑을 한 조회 안에서 겹쳐 쓰고 있다면 Hibernate ORM 7.4.8은 그냥 넘기기 어려운 패치다. 평범한 CRUD에서는 드러나지 않지만, 초기화된 프록시가 @Any 값으로 들어오면 프록시 클래스 이름을 엔티티 이름으로 잘못 해석해 UnknownEntityTypeException을 내던 경로가 있었다. 다른 @Any를 거쳐 treat()로 접근할 때 실제 처리 대상 테이블을 찾지 못하던 문제도 이번 버전에서 고쳤다.
가장 눈에 띄는 부분은 필터와 연관관계가 만나는 지점이다. applyToLoadByKey 필터가 적용된 조인 상속 구조에서 필요한 조인이 사라지거나, @FilterJoinTable을 쓰는 다대다 연관관계를 명시적 HQL로 조인할 때 NullPointerException이 발생할 수 있었다. SQL 제한이 붙은 to-one 대상과 지연 ManyToOne의 테이블 그룹 등록 문제까지 함께 바로잡았다.
조회 코드만 볼 일도 아니다. 임시 엔티티 테이블은 이제 물리 열 이름을 사용하고, 상속 계층에서 이름이 겹치는 열에는 접두사가 붙는다. MySQL 스키마 갱신 중 외래 키 조회가 예외를 내던 SQL과 SQL Server에서 마이크로초보다 작은 시간 입력을 반올림하던 문제도 수정됐다. reflection optimizer와 관련 속성 접근 API는 deprecated로 표시됐으므로 이 내부 API를 직접 참조하는 코드가 있다면 컴파일 경고도 살펴야 한다.
모든 Hibernate 사용자가 서둘러 올릴 필요는 없다. 하지만 @Any, treat(), 필터가 붙은 연관관계, 임시 테이블을 쓰는 대량 연산 또는 자동 스키마 갱신이 하나라도 있다면 업그레이드 후보에 먼저 올릴 만하다. 전체 테스트를 무작정 늘리기보다 해당 매핑의 SQL 로그와 생성된 DDL을 이전 버전과 비교하는 편이 빠르다. deprecated API를 직접 쓰는 곳은 공개 속성 접근 API로 옮길 계획도 함께 잡으면 된다.