2012-09-09 13 views
6

Chciałbym uzyskać losowy obiekt z bazy danych tylko z GORM, bez użycia specyficznego kodu bazy danych.Losowy obiekt z bazy danych z GORM

Obecnie używam to:

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

Ale nie jestem zadowolony z tego, ponieważ używam funkcji rand() MySQL. Niektórzy ludzie zalecają pobranie wszystkich identyfikatorów, a następnie wybranie losowego, a następnie zapytanie o cały obiekt, ale nie chcę dwóch zapytań.

Czy jest na to sposób GORM? Jeśli nie jest to czysta GORM, to może rozwiązanie Hibernacji może wystarczyć.

(widziałem to pytanie tutaj Grails GORM to return random rows from table?, ale to nie pomaga :))

Odpowiedz

5

Można najpierw uzyskać losową offset, umieścić max:1 a następnie wykonać zapytanie z tych parametrów paginacji!
(Uwaga: najpierw musisz wykonać count() na swoim stole, ale nie jest to bardzo kosztowna operacja.)

+0

Dzięki, to brzmi jak całkiem niezły pomysł. –

+0

Nie miałem czasu, aby to przetestować. Ale wybiorę to jako odpowiedź :) –

Powiązane problemy