728x90
spring data mongo를 사용하여 MongoTemplate 를 이용하여 쿼리를 작성하다 보면 아래와 같이 필드값에 대해 string 값을 사용하게 된다.
Criteria.where("_id").`is`(Entity.id)
하지만 이렇게 쿼리를 사용하다 보면 type-safe 하지 않다는 점과 실제로 해당 엔티티에 존재하는 필드인지 오탈자는 없는지 실행되는 순간까지 확인할 수 없으므로 위험도는 증가한다.
private class KPropertyPath<T, U>(
val parent: KProperty<U?>,
val child: KProperty1<U, T>
) : KProperty<T> by child
/**
* Recursively construct field name for a nested property.
* @author Tjeu Kayim
*/
internal fun asString(property: KProperty<*>): String {
return when (property) {
is KPropertyPath<*, *> ->
"${asString(property.parent)}.${property.child.name}"
else -> property.name
}
}
/**
* Builds [KPropertyPath] from Property References.
* Refer to a nested property in an embeddable or association.
*
* For example, referring to the field "author.name":
* ```
* Book::author / Author::name isEqualTo "Herman Melville"
* ```
* @author Tjeu Kayim
* @author Yoann de Martino
* @since 2.5
*/
operator fun <T, U> KProperty<T?>.div(other: KProperty1<T, U>): KProperty<U> =
KPropertyPath(this, other)
728x90
'spring' 카테고리의 다른 글
WebClient의 DataBufferLimitException 해결방법 (0) | 2024.11.15 |
---|---|
TestExecutionListener를 이용한 테스트 격리 방법 (1) | 2024.11.05 |
Spring Async (0) | 2024.08.02 |
Spring Webclient (0) | 2024.08.02 |
Spring AOP (0) | 2024.08.02 |