Skip to content

feat: @Converter(autoApply = true) 적용 시 올바른 컬럼 타입 매핑 지원 #112

Description

@coderabbitai

개요

PR #111 에서 @Convert + @Column(length) 사용 시 TEXT로 생성되는 버그를 수정하였으나, @Converter(autoApply = true) 케이스는 여전히 미처리 상태로 남아 있습니다.

문제 설명

@Converter(autoApply = true) 어노테이션을 사용하는 경우, 어노테이션 프로세서 단계에서 해당 컨버터에 대한 TypeMirror를 확보할 수 없습니다.
이로 인해 AttributeConverter<X, Y>의 Y 타입(DB 저장 타입)을 추출하지 못하고, 결과적으로 컬럼 타입이 TEXT로 잘못 생성됩니다.

재현 예시

@Converter(autoApply = true)
public class MoneyConverter implements AttributeConverter<Money, String> { ... }

// 엔티티 필드 (명시적 @Convert 없음)
@Column(length = 30, nullable = false)
private Money price;

price 컬럼이 TEXT NOT NULL로 생성됨 (기대값: VARCHAR(30))

원인

  • autoApply = true 인 컨버터는 필드에 @Convert 어노테이션이 명시되지 않으므로, 현재 어노테이션 프로세서 로직에서 컨버터 클래스를 탐지하지 못함
  • ColumnModel.converterOutputType 필드가 설정되지 않아 JavaTypeMapperUNKNOWN_TYPE → TEXT로 폴백함

기대 동작

Converter 예시 @Column 설정 현재 기대
MoneyConverter<Money, String> (autoApply) length=30 TEXT VARCHAR(30)

해결 방향 (제안)

  1. 어노테이션 프로세서에서 @Converter(autoApply = true)로 등록된 컨버터 목록을 수집
  2. 엔티티 필드의 Java 타입과 컨버터의 X 타입을 매칭하여 자동으로 Y 타입을 추출
  3. ColumnModel.converterOutputType에 저장하여 기존 DDL/Liquibase 타입 결정 로직 재활용

관련 PR / 참고

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions