2008-12-02 15 views
4

J'ai une requête MySQL que j'utilise pour récupérer des lignes aléatoires d'une table. La requête est:Requête SQI pour mettre en veille prolongée

SELECT * FROM QUESTION WHERE TESTID=1 ORDER BY RAND() LIMIT 10; 

Maintenant, je dois changer cette requête Hibernate. A fait un peu de googling mais n'a pas pu trouver la réponse. Quelqu'un peut-il fournir de l'aide à ce sujet?

Répondre

1

Selon cette post, vous pouvez le faire:

String query = "from QUESTION order by newid()"; 
Query q = session.createQuery(query); 
q.setMaxResults(10); 

Je ne sais pas si cela va fonctionner (en particulier pour la partie aléatoire), mais vous pouvez l'essayer :)

2

La fonction aléatoire est différent entre chaque base de données sous-jacente et n'est pas une partie standard de SQL92. Etant donné que vous aurez besoin d'implémenter un SQLDialect pour le type de base de données que vous utilisez.

par exemple:

 
class PostgresSQLDialect extends org.hibernate.dialect.PostgreSQLDialect { 
    PostgresSQLDialect() { 
     super() 
     registerFunction("rand", new NoArgSQLFunction("random", Hibernate.DOUBLE)); 
    } 
}

Ensuite, vous devez définir ce dialecte dans la configuration

 
hibernate { 
    dialect='com.mycompany.sql.PostgresSQLDialect' 
}