Kotlin JPA 사용하기

h블로그·2022년 4월 15일
0

코프링

목록 보기
1/2

Entity 만들기

data class 란

kotlin에는 data class 라는 것이 있다. 이를 사용하면, toString(), equals(), hashCode() 를 자동 생성해준다.

entity 클래스에는 data class를 사용하길 권고하지 않는다.

코클린은 모든 클래스가 final로 선언된다. 그러나, jpa에서 entity 는 final을 사용하지 말라고 한다. 그 이유는 final을 사용하게 되면 lazy loading을 위한 프록시 객체를 사용할수 없게 된다.

entity를 final이 아닌 형태로 선언하기 위해서 open 을 사용해서 선언해야 하는데, data class에는 open 키워드를 붙힐수가 없다. 이 이유로 entity클래스는 일반 class로 선언해야 한다.

allOpen 플러그인

반복적으로 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 플러그인을 따로 추가할 필요가 없다.

No-arg 플러그인

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

profile
😎🙈🙈🙈🤓

0개의 댓글