728x90
자바에서 Querydsl을 사용하여 동적으로 정렬 조건을 생성하기 위해서는 다음과 같은 코드를 작성하면 됩니다.
for (Sort.Order o : pageable.getSort()) {
PathBuilder pathBuilder =
new PathBuilder(member.getType(),member.getMetadata());
query.orderBy(
new OrderSpecifier(
o.isAscending() ? Order.ASC : Order.DESC,
pathBuilder.get(o.getProperty())
)
);
}
그러나 해당 코드를 아래와 같이 코틀린으로 변환하면 오류가 뜨면서 컴파일되지 않습니다.
for (o in pageable.sort) {
val pathBuilder = PathBuilder(member.type, member.metadata)
query.orderBy(
OrderSpecifier(
if (o.isAscending) ASC else DESC,
pathBuilder.get(o.property)
)
)
}
return query
다음과 같이 해결할 수 있습니다.
for (o in pageable.sort) {
val pathBuilder = PathBuilder(member.type, member.metadata)
query.orderBy(
OrderSpecifier(
if (o.isAscending) ASC else DESC,
pathBuilder.get(o.property) as Expression<out Comparable<*>>
)
)
}
// return beforeSortQuery.orderBy()
최근 코틀린을 사용하며 느끼는 거지만, 자바랑 제네릭 부분에서 호환이 잘 되지 않아 힘들때가 종종 많네요..ㅠㅠ
728x90