Background
현재 JpaSqlGeneratorProcessor는 ElementKind.CLASS만 지원하여 record를 @Embeddable로 선언할 경우 인식하지 못합니다.
JPA 3.2 스펙에 맞춰 record 기반 embeddable을 완전히 지원하기 위해 리팩토링이 필요합니다.
Refactoring Plan
Phase 1: 기본 아키텍처 확장
JpaSqlGeneratorProcessor에서 ElementKind.RECORD 지원 추가
RecordAttributeDescriptor 생성 (record component 기반 속성 처리)
Phase 2: AttributeDescriptorFactory 확장
record component 처리 로직 추가
AttributeCandidate 확장 (record component 필드 추가, 우선순위 반영)
Phase 3: 검증 및 제약사항 처리
- record 특화 검증 로직
- final 클래스 → 상속 불가
- component는 implicitly final
- canonical constructor만 존재
- setter 없음
@AttributeOverride record component 지원
Phase 4: 테스트 및 검증
-
Record embeddable 테스트 엔티티 추가
@Embeddable
public record Address(
@Column(name = "street_name") String street,
String city,
@Column(length = 10) String zipCode
) {}
-
통합 테스트 시나리오
- 단순 record embeddable
- 중첩 record embeddable
- AttributeOverride 적용
- 관계형 매핑과 조합
- EmbeddedId로 record 사용
Phase 5: 호환성 및 성능
- 하위 호환성 보장 (class 기반 embeddable 유지)
- 성능 최적화
Priority
ElementKind.RECORD 지원
AttributeDescriptorFactory 확장
- 검증 로직
- 테스트 작성
Expected Outcome
- JPA 3.2 스펙에 따라
record 기반 @Embeddable 완전 지원
- 기존 class 기반 embeddable과 완벽한 하위 호환성
- 마이그레이션 가이드 및 성능 최적화 포함
Background
현재
JpaSqlGeneratorProcessor는ElementKind.CLASS만 지원하여record를@Embeddable로 선언할 경우 인식하지 못합니다.JPA 3.2 스펙에 맞춰 record 기반 embeddable을 완전히 지원하기 위해 리팩토링이 필요합니다.
Refactoring Plan
Phase 1: 기본 아키텍처 확장
JpaSqlGeneratorProcessor에서ElementKind.RECORD지원 추가RecordAttributeDescriptor생성 (record component기반 속성 처리)Phase 2: AttributeDescriptorFactory 확장
record component처리 로직 추가AttributeCandidate확장 (record component 필드 추가, 우선순위 반영)Phase 3: 검증 및 제약사항 처리
@AttributeOverriderecord component 지원Phase 4: 테스트 및 검증
Record embeddable 테스트 엔티티 추가
통합 테스트 시나리오
Phase 5: 호환성 및 성능
Priority
ElementKind.RECORD지원AttributeDescriptorFactory확장Expected Outcome
record기반@Embeddable완전 지원