kotlin

[Kotlin] JPA 플러그인 정리

danuri 2024. 7. 19. 22:57

기본 생성자

@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