2010-03-17 13 views
10

En MySQL,selectas filas al azar a través de la APP

SELECT id FROM table ORDER BY RANDOM() LIMIT 5 

este SQL puede seleccionar 5 filas aleatorias. ¿Cómo hacer esto a través de JPA Query (Hibernate como proveedor, base de datos Mysql)?

Gracias.

Respuesta

10

Solo las funciones definidas en la especificación están garantizadas para ser compatibles con todos los proveedores de JPA y RAND o RANDOM no lo son. Entonces no creo que puedas hacerlo en JPQL.

Sin embargo, sería posible en HQL (la orden por cláusula en HQL se pasa a través de la base de datos, por lo que se puede utilizar cualquier función):

String query = "SELECT o.id FROM Order o ORDER BY random()"; 
Query q = em.createQuery(query); 
q.setMaxResults(5); 

Pero, repito:

  1. Esto puede no funcionar con otra base de datos.
  2. Esto puede no funcionar con otro proveedor de JPA.
-1

Intente calcular el azar de antemano y construya su consulta JPQL/HQL/nativa con el valor aleatorio precalculado.

+0

rand() o al azar() generan un valor aleatorio * para cada fila * por lo que la pregeneración de un solo valor aleatorio no funcionará –

Cuestiones relacionadas