kotlin에는 data class
라는 것이 있다. 이를 사용하면, toString()
, equals()
, hashCode()
를 자동 생성해준다.
data class
를 사용하길 권고하지 않는다.코클린은 모든 클래스가 final
로 선언된다. 그러나, jpa에서 entity 는 final
을 사용하지 말라고 한다. 그 이유는 final
을 사용하게 되면 lazy loading을 위한 프록시 객체를 사용할수 없게 된다.
entity를 final
이 아닌 형태로 선언하기 위해서 open
을 사용해서 선언해야 하는데, data class
에는 open
키워드를 붙힐수가 없다. 이 이유로 entity클래스는 일반 class
로 선언해야 한다.
반복적으로 entity 클래스에 open을 달아주는 것을 편리하게 해주도록 플러그인을 제공한다.
plugin {
kotlin("plugin.allopen") version "1.4.32"
}
allOpen {
annotation("javax.persistence.Entity")
annotation("javax.persistence.Embeddable")
annotation("javax.persistence.MappedSuperclass")
}
@Entity
를 사용하면 open
을 직접 달아줄 필요 없다.
그러나 kotlin("plugin.spring")
플러그인을 사용한다면 allOpen 플러그인을 따로 추가할 필요가 없다.
jpa entity 클래스는 기본 생성자가 필수이다.
plugin.jpa
플러그인을 사용하면 매번 기본 생성자를 직접 작성할 필요 없다.
plugin {
kotlin("plugin.jpa") version "1.6.10"
}
@Entity
사용하면 적용된다.
open과 다르게 Entity 어노테이션에 대한 NoArg{ ... }
는 선언해주지 않아도된다.
https://techblog.woowahan.com/2675/
https://blog.junu.dev/37