기본 생성자
@Entity 클래스는 기본 생성자를 가져야 한다.
why? JPA의 구현체인 hibernate는 기본생성자(protected 이상) + Reflection을 이용해 엔티티를 생성한다.
보통 kotlin 클래스는 다음과 같이 정의 하는데,
@Entity
class Customer private constructor(
@EmbeddedId
val id: CustomerId,
var password: CustomerPassword,
var name: String,
)
이러면 기본 생성자가 안생기니, 별도로 기본 생성자를 정의해줘야 하나 싶다.
-> kotlin-jpa 플러그인을 추가하면 @Entity, @MappedSuperClass, @Embeddable 클래스에 기본 생성자를 생성해준다.
ex) build.gradle.kts
plugins {
...
kotlin("plugin.jpa") version "1.9.20"
}
컴파일러 플러그인이어서, 컴파일 되기 전 직접적으로 호출할 수 없고, reflection을 통해서만 호출할 수 있기 때문에,
평소 코드를 작성할 때는 기본생성자가 없는 것처럼 생각할 수 있다.
참고자료
https://docs.jboss.org/hibernate/orm/6.1/userguide/html_single/Hibernate_User_Guide.html#entity
https://spring.io/guides/tutorials/spring-boot-kotlin
'kotlin' 카테고리의 다른 글
[Kotlin] Private primary constructor is exposed via the generated 'copy()' method of a 'data' class. (0) | 2024.07.20 |
---|---|
[Kotlin] 추가적으로 알아두어야 할 코틀린 특성 (0) | 2023.06.20 |
[Kotlin] 코틀린에서의 FP (0) | 2023.06.04 |
[Kotlin] 코틀린에서의 OOP (0) | 2023.05.07 |
[Kotlin] 코틀린에서 코드를 제어하는 방법 (4) | 2023.05.07 |