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