Backend/Kotlin

[Kotlin] 코틀린에서 @QueryProjection 사용하기

findmypiece 2022. 2. 3. 17:30
728x90

Querydsl를 이용하는 경우 엔티티와 다른 반환 타입인 경우 Projections를 사용한다. Projections 를 적용하는 방법은 여러가지가 있는데 권장되는 방법은 @QueryProjection 어노테이션을 활용하는 것이다. 

 

우선 https://findmypiece.tistory.com/287 와 같이 코틀린에서 JPA Entity 를 정의할 경우 일반 class 사용이 권장되지만 Projections 은 영속상태가 아니라 dirty checking 도 동작하지 않고 lazy loading도 어차피 지원하지 않기 때문에 data class 를 사용해도 무관하다.

 

 

@QueryProjection 는 생성자에 지정할 수 있는데 코틀린에서는 이걸 사용하기가 좀 애매하다. 기본생성자를 별도 클래스로 만드는 자바와 달리 코틀린에서는 아래와 같이 클래스 선언과 동시에 기본생성자를 지정하기 때문이다.

 

 

data class SysValidTime (
    val validTimeStart: String,
    val validTimeEnd: String
)

 

그런데 코틀린에서 기본생성자를 선언할 때는 아래와 같이 constructor 키워드를 사용할 수도 있고 이 경우 생성자로 분류되어 @QueryProjection 선언이 가능해진다.

 

data class SysValidTime @QueryProjection constructor(
    val validTimeStart: String,
    val validTimeEnd: String
)

 

https://cheese10yun.github.io/querydsl-projections/
https://jessyt.tistory.com/107
https://multifrontgarden.tistory.com/286
https://shinjekim.github.io/kotlin/2019/09/02/Kotlin-코틀린의-생성자(Constructor)/
728x90