kotlin JPA 에러 해결
위 에러 메시지는 Hibernate와 관련이 있으며, 특히 JPA에서 @Embeddable
클래스에 대한 기본 생성자를 찾을 수 없을 때 발생합니다. Kotlin의 data class
는 자동으로 기본 생성자를 제공하지만, 기본 생성자에 디폴트 값을 명시하지 않으면 JPA에서 요구하는 기본 생성자로 인식되지 않을 수 있습니다.
해결 방안
-
디폴트 값 추가
JPA는 기본 생성자를 요구하므로,data class
에 기본 생성자를 명시적으로 추가하고 디폴트 값을 제공해야 합니다.여기서
RegionCode.DEFAULT
는RegionCode
클래스에 정의된 기본 값으로, 필요에 따라 적절히 설정해야 합니다. -
기본 생성자를 제공하기 위해 클래스에
@JvmOverloads
사용 (선택 사항)
기본 생성자에 디폴트 값을 제공할 경우@JvmOverloads
어노테이션을 추가하여 생성자 오버로드를 생성할 수 있습니다. 이는 JPA가 호출할 기본 생성자를 명시적으로 제공하게 만듭니다. -
@Embeddable
명시
JPA가 클래스가 임베디드 타입임을 인식하려면@Embeddable
어노테이션이 필요합니다.IaasAccessId
클래스에 추가해야 합니다. -
Kotlin에서
val
또는var
프로퍼티 사용
JPA는 클래스의 필드 접근자 메서드를 활용하므로 모든 필드는val
또는var
키워드로 선언해야 합니다.val
은 읽기 전용이지만, JPA는 프록시 객체 생성을 위해 리플렉션을 사용하기 때문에 문제 없이 동작합니다. -
Hibernate 설정 확인
Hibernate가 Kotlin의 클래스와 잘 호환되도록 하기 위해hibernate-enhance-maven-plugin
또는 Gradle용 Hibernate Kotlin 확장 모듈을 사용하는 것이 좋습니다.
최종 코드 예시
이렇게 하면 JPA가 IaasAccessId
를 @Embeddable
타입으로 인식하고 기본 생성자 문제 없이 동작할 것입니다.