개발/JPA

Kotlin에서 JPA 사용시 참고사항

브라운구 2022. 3. 30. 14:20
반응형

 

No-arg 생성자 자동 생성

JPA 사용시 디폴트 생성자가 있어야한다.

Entity는 반드시 public 혹은 protected의 no-arg생성자를 가지고 있어야 한다. Entity는 final 클래스일 수 없다. 모든 메소드와 엔티티 내에 영속화(persist)되는 변수들 또한 final로 지정할 수 없다

다음 플러그인은 @Entity, @Embeddable, @MappedSuperClass 어노테이션이 붙어있는 클래스에 No-arg 생성자를 자동으로 생성해준다

plugins {
    kotlin("plugin.jpa") version "1.5.10"
}

allOpen 플러그인

코틀린의 클래스 및 메소드, 프로퍼티의 기본 변경자는 final이기 때문에 상속 및 오버라이드가 불가능하다

JPA의 지연로딩은 원본클래스를 상속하여 프록시로 만들고 사용하기 때문에 아래 작업을 꼭 해주어야한다. 안그러면 지연로딩이 되질 않는(모든게 즉시로딩) 상황을 볼 수 있다

 

@Entity@Embeddable@MappedSuperClass에 일일히 open을 적어주는것도 일이기 때문에 아래 플러그인을 적용하여 위의 어노테이션에 대해 open 상태로 만들어 주자

plugins {
    kotlin("plugin.jpa") version "1.5.10"
    kotlin("plugin.allopen") version "1.5.10"
}

allOpen {
    annotation("javax.persistence.Entity")
    annotation("javax.persistence.Embeddable")
    annotation("javax.persistence.MappedSuperclass")
}

코틀린의 엔티티 클래스
open 클래스로 만들어 진것을 볼 수 있다

 

반응형