2010-12-12 28 views
2

J'utilise le code suivant pour exécuter une requête HQL avec Hibernate:hibernent lignes top N HQL requête

String myHqlQuery = "select from MyTable where Something = ? order by SomeVal"; 
// Set bind values ... 
getHibernateTemplate().find(myHqlQuery, bindParams); 

Maintenant, je veux sélectionner les lignes N haut de la table. Je sais que mySql a le mot-clé LIMIT qui n'est pas disponible en HQL. Je sais aussi que Hibernate a la méthode setMaxResults() que vous pouvez utiliser sur un objet Query.

Ma question est - est-il possible d'ajouter la contrainte "limite" sans devoir trop modifier mon code (c'est-à-dire en exécutant la requête via un objet HibernateTemplate)?

+1

duplication possible de [Comment faire une requête de limite dans HQL] (http://stackoverflow.com/questions/1239723/how-do-you-do-a-limit-query-in-hql) – hvgotcodes

+0

votre right..thanks .. cette question peut être fermée alors je suppose ... à moins bien sûr theres vraiment moyen de le faire maintenant directement avec HQL. – kli

Répondre

2

Le code ci-dessous fonctionne pour moi

HibernateTemplate ht = getHibernateTemplate(); 
    ht.setMaxResults(10); 
    List<Object> obj= ht.findByNamedQueryAndNamedParam("namedQuery", 
      new String[] { "parameter1" }, 
      new Object[] { parameter1 }); 

Je pense que vous devriez être en mesure de le faire:

String myHqlQuery = "select from MyTable where Something = ? order by SomeVal"; 

// Set bind values ... 

HibernateTemplate ht = getHibernateTemplate(); 

ht.setMaxResults(10); 

ht.find(myHqlQuery, bindParams); 
0

utilisation

org.springframework.data.domain.Pageable

int numberOfItems = 10; 

Pageable pageableTop = new PageRequest(0, numberOfItems); 
yourRepository.findYourEntity(pageableTop);