본문 바로가기

Programming!

MySQL : Order By RAND() - JPA QueryDSL

JPA + QueryDSL 의 MySQL환경에서 정말 간혹 rand() 함수를 사용해서 order by를 걸고 싶을때가 있다.

 

where(xxx)
.orderBy(NumberExpression.random().asc())
.limit(100000)
// 뭐 대충 이런...

MySQL은 안된다.

별도의 Template를 만들던가 해야 하는데 그냥 가볍게 사용할거면 아래와 같이 하자.

.where(
    WhereClauseBuilder.builder().build()
).orderBy(
    Expressions.numberTemplate(Double::class.java, "function('rand')").asc()
)

무겁게는 사용하지 말자.