2012-09-09 16 views
6

Vorrei ottenere un oggetto casuale dal database solo con GORM, senza utilizzare il codice specifico del database.Oggetto casuale dal database con GORM

Attualmente sto usando questo:

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

Ma io non sono soddisfatto perché sto utilizzando la funzione di mysql rand(). Alcune persone consigliano di ottenere tutti gli ID, quindi ne scelgono uno casuale e quindi interrogano l'intero oggetto, ma non voglio due query.

Esiste un modo GORM per fare ciò? Se non fosse puro Gorm, allora forse la soluzione Hibernate farebbe il trucco.

(ho visto questa domanda qui Grails GORM to return random rows from table?, ma non aiuta :))

risposta

5

È possibile ottenere prima di offset di un caso, mettere max:1 e quindi eseguire la query con questi parametri di impaginazione!
(Nota: per prima cosa devi fare un count() sul tuo tavolo ma non è un'operazione molto costosa.)

+0

Grazie, sembra un'idea abbastanza buona. –

+0

Non ho ancora avuto il tempo di provarlo. Ma lo sceglierò come risposta :) –