Случайный объект из базы данных с GORM

Я хотел бы получить случайный объект из базы данных только с помощью GORM, без использования конкретного кода базы данных.

В настоящее время я использую это:

Tag.executeQuery("from Tag order by rand()", [max: Tag.count()])

Но меня это не устраивает, потому что я использую функцию mysql rand(). Некоторые люди рекомендуют получить все идентификаторы, затем выбрать случайный, а затем запросить весь объект, но я не хочу два запроса.

Есть ли способ GORM сделать это? Если не чистый GORM, то, возможно, решение Hibernate сделает свое дело.

(Я видел этот вопрос здесь Grails GORM, чтобы вернуть случайные строки из таблицы?, Но это не помогает:))

1 ответ

Решение

Вы можете сначала получить случайное смещение, положить max:1 и затем выполните ваш запрос с этими параметрами пагинации!
(Примечание: вам придется сделать count() сначала на вашем столе, но это не очень дорогая операция.)

Другие вопросы по тегам