개요
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 필드가 설정되지 않아 JavaTypeMapper가 UNKNOWN_TYPE → TEXT로 폴백함
기대 동작
| Converter 예시 |
@Column 설정 |
현재 |
기대 |
MoneyConverter<Money, String> (autoApply) |
length=30 |
TEXT |
VARCHAR(30) |
해결 방향 (제안)
- 어노테이션 프로세서에서
@Converter(autoApply = true)로 등록된 컨버터 목록을 수집
- 엔티티 필드의 Java 타입과 컨버터의 X 타입을 매칭하여 자동으로 Y 타입을 추출
ColumnModel.converterOutputType에 저장하여 기존 DDL/Liquibase 타입 결정 로직 재활용
관련 PR / 참고
개요
PR #111 에서
@Convert+@Column(length)사용 시TEXT로 생성되는 버그를 수정하였으나,@Converter(autoApply = true)케이스는 여전히 미처리 상태로 남아 있습니다.문제 설명
@Converter(autoApply = true)어노테이션을 사용하는 경우, 어노테이션 프로세서 단계에서 해당 컨버터에 대한TypeMirror를 확보할 수 없습니다.이로 인해
AttributeConverter<X, Y>의 Y 타입(DB 저장 타입)을 추출하지 못하고, 결과적으로 컬럼 타입이TEXT로 잘못 생성됩니다.재현 예시
→
price컬럼이TEXT NOT NULL로 생성됨 (기대값:VARCHAR(30))원인
autoApply = true인 컨버터는 필드에@Convert어노테이션이 명시되지 않으므로, 현재 어노테이션 프로세서 로직에서 컨버터 클래스를 탐지하지 못함ColumnModel.converterOutputType필드가 설정되지 않아JavaTypeMapper가UNKNOWN_TYPE → TEXT로 폴백함기대 동작
@Column설정MoneyConverter<Money, String>(autoApply)length=30TEXTVARCHAR(30)해결 방향 (제안)
@Converter(autoApply = true)로 등록된 컨버터 목록을 수집ColumnModel.converterOutputType에 저장하여 기존 DDL/Liquibase 타입 결정 로직 재활용관련 PR / 참고