2009-11-22 4 views

Répondre

1

A partir d'aujourd'hui (9e Avril 2010), JPQL ne supporte pas la commande aléatoire

+1

Pouvez-vous citer votre demande? –

4

C'est ce que j'utilise. Je reçois d'abord le nombre de lignes pour l'entité et ensuite je limite les résultats de la requête d'extraction à une ligne aléatoire. Cela implique deux requêtes, donc si cela vous pose un problème, vous pouvez vouloir regarder des requêtes natives. Sinon, voici le code que j'utilise:

public <T> T randomEntity(EntityManager em, Class<T> clazz) { 
     Query countQuery = em.createQuery("select count(id) from "+clazz.getName()); 
     long count = (Long)countQuery.getSingleResult(); 

     Random random = new Random(); 
     int number = random.nextInt((int)count); 

     Query selectQuery = em.createQuery("from "+clazz.getName()); 
     selectQuery.setFirstResult(number); 
     selectQuery.setMaxResults(1); 
     return (T)selectQuery.getSingleResult(); 
} 
Questions connexes