반응형
Kotlin에서 JPA를 사용하면서 겪은 시행착오를 좀 짧게 적어보려고 한다.
다른 글들도 많지만 개인 정리 겸 한꺼번에 모아서 보기 위함이다.
plugin.jpa 사용하기
plugins {
kotlin("plugin.allopen") version "1.3.71"
kotlin("plugin.noarg") version "1.3.71"
kotlin("plugin.jpa") version "1.3.72"
}
allOpen {
annotation("javax.persistence.Entity")
}
noArg {
annotation("javax.persistence.Entity")
}
JPA에서 Lazy Loading을 사용하려면 프록시 객체를 이용해야한다.
하지만 Kotlin에서의 모든 클래스, 함수, 프로퍼티는 final 속성으로 상속이 불가능하기 때문에 상속이 필요한 프록시 객체가 생성이 안된다. 그래서 함수마다 open을 적어줘야하는데 위처럼 한방에 allOpen 처리를 할 수 있다.
더불어 엔티티는 noArgs가 필수지만 Lombok을 쓰는 것보다는 위처럼 일괄처리 하는 것이 좋다.
Entity로 data class는 사용하면 안된다.
기본적으로 open이 안되며 data class는 불변객체에 속한다. Entity는 기본적으로 가변이기 때문에 data class는 쓰지 않는다.
plugin.jpa만 적어도 noarg와 allopen 플러그인이 포함되어있다.
728x90
'📖 ORM' 카테고리의 다른 글
JPA Entity에서 필드에 this를 쓴 것과 안 쓴 것의 차이 (1) | 2023.07.27 |
---|---|
MSA 환경에서의 JPA 사용법 (0) | 2023.06.21 |
Fetch Join 사용 시 조건문(Condition) 올바르게 사용하기 - 실습으로 배우는 JPA 4편 (0) | 2022.11.03 |
@Transactional 사용 시 자기 호출(Self-Invocation) 이슈 - 실습으로 배우는 JPA 3편 (2) | 2022.07.06 |
findAll()에 관한 N+1 테스트 - 실습으로 배우는 JPA 2편 (0) | 2022.06.30 |