Skip to content

Support record as @Embeddable in JPA 3.2 (Record Embeddable Refactoring Plan) #77

Description

@yyubin

Background

현재 JpaSqlGeneratorProcessorElementKind.CLASS만 지원하여 record@Embeddable로 선언할 경우 인식하지 못합니다.

JPA 3.2 스펙에 맞춰 record 기반 embeddable을 완전히 지원하기 위해 리팩토링이 필요합니다.


Refactoring Plan

Phase 1: 기본 아키텍처 확장

  1. JpaSqlGeneratorProcessor에서 ElementKind.RECORD 지원 추가
  2. RecordAttributeDescriptor 생성 (record component 기반 속성 처리)

Phase 2: AttributeDescriptorFactory 확장

  1. record component 처리 로직 추가
  2. AttributeCandidate 확장 (record component 필드 추가, 우선순위 반영)

Phase 3: 검증 및 제약사항 처리

  1. record 특화 검증 로직
    • final 클래스 → 상속 불가
    • component는 implicitly final
    • canonical constructor만 존재
    • setter 없음
  2. @AttributeOverride record component 지원

Phase 4: 테스트 및 검증

  1. Record embeddable 테스트 엔티티 추가

    @Embeddable
    public record Address(
        @Column(name = "street_name") String street,
        String city,
        @Column(length = 10) String zipCode
    ) {}
  2. 통합 테스트 시나리오

    • 단순 record embeddable
    • 중첩 record embeddable
    • AttributeOverride 적용
    • 관계형 매핑과 조합
    • EmbeddedId로 record 사용

Phase 5: 호환성 및 성능

  1. 하위 호환성 보장 (class 기반 embeddable 유지)
  2. 성능 최적화
    • record component 캐싱

Priority

  1. ElementKind.RECORD 지원
  2. AttributeDescriptorFactory 확장
  3. 검증 로직
  4. 테스트 작성

Expected Outcome

  • JPA 3.2 스펙에 따라 record 기반 @Embeddable 완전 지원
  • 기존 class 기반 embeddable과 완벽한 하위 호환성
  • 마이그레이션 가이드 및 성능 최적화 포함

Metadata

Metadata

Assignees

Labels

area:processormodule processor areaenhancementNew feature or requestfeaturewant a new featurepriority:P2the second highest priority

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions