kotlin에서의 hibernate

0

Kotlin

목록 보기
4/32

일단 kotlin에서 hibernate쓰는 방식이랑 java에서 hibernate 쓰는 방식이랑 다르다. 몇개의 설정이 필요함. 아래 링크에 kotlin으로 작성하는 jpa entity에 대한 설정을 어떻게 하면 좋을지 잘 나와있어서 나에게 필요한 부분을 정리해서 남겨놓으려고 한다.


  • kotlin-allopen 플러그인을 build path에 적용합니다. Hibernate에서는 final클래스를 사용하면 안 되기 때문에 해당 플러그인을 이용하여 자동으로 open 상태로 만들어 줍니다.
plugins {
    id "org.jetbrains.kotlin.plugin.allopen" version "1.3.61"
}
allOpen { 
    annotation("javax.persistence.Entity") 
    annotation("javax.persistence.MappedSuperclass")
    annotation("javax.persistence.Embeddable")
}

-> MappedSuperclassEmbeddable 에 대한 noArg 생성자가 필요없다면 넣지 않아도 될것같음.

Entity클래스를 data class로 작성하는 방법은 추천하지 않습니다. Hibernate는 자동 생성된 equals/hashcode, toString 과 궁합이 좋지 않습니다.

  • 코틀린을 JPA에 적용하면서 본 많은 예제들은 data class를 사용해서 Entity를 작성했습니다.

  • 코틀린의 data class는 Lombok의 @Data 어노테이션처럼 많은 메소드들을 자동으로 생성해줍니다.

    • 자바에서 Lombok을 사용해보신 분들은 알겠지만 @Data 어노테이션이 만들어준 toString()을 그대로 사용할 경우, 양방향 연관관계를 갖는 Entity들은 순환 참조 문제가 발생하면서 StackOverflow가 발생하는 것을 알고 계실 거라고 생각합니다.
  • 이러한 이슈는 이외에도 자동으로 작성된 equals와 hashcode 가 의도치 않은 상황을 야기할 수 있으므로 entity에는 data class의 사용은 지양하자는 것이 개인적인 의견입니다.

profile
백엔드를 공부하고 있습니다.

0개의 댓글