[Kotlin + Spring] 1. Jpa Entity Issue

상속 문제

  • Hibernate 의 지연로딩을 위해 Entity 를 상속하여 프록시를 만든다.
  • Kotlin 에서 Java 관련 프레임워크를 사용하게 된다면 문제가 되는 부분 중 하나가 상속 이다.
    • kotlin 은 기본이 final class
    • open 을 붙여서 해결해줘야한다.
  • 매번 작업하다보면 놓칠 수 있으므로, all-open-plugin 를 이용

해결 방법

plugins {
  id "org.jetbrains.kotlin.plugin.allopen" version "1.6.21"
}

allOpen {
    annotation("com.my.Annotation")
}

Reflection API

  • Hibernate 에서 Reflection 을 이용하므로 기본 생성자를 필요로 함.
  • https://kotlinlang.org/docs/no-arg-plugin.html#gradle

해결방법

plugins {
  id "org.jetbrains.kotlin.plugin.noarg" version "1.6.21"
}

noArg {
    annotation("com.my.Annotation")
}

Data class

  • data class 를 사용하여 entity 를 사용하게 된다면?
    • Entity 를 불변으로 사용은 가능하겠지만, dirty check 등의 어려움이 있음.
    • Spring guide 에서도 권장하지 않음…
      • https://spring.io/guides/tutorials/spring-boot-kotlin/
    • 그냥 class 를 사용하는게 좋겠다.

Related Posts