2011-02-15 4 views
1

Comment écrire une requête Critères Hibernate à trier dans l'ordre décroissant pour les 10 premières lignes seulement dans DB2 Dailect.Critères Hibernate dans DB2

dans Db2: J'ai la table des employés 20 enregistrements commence à partir de 1 ... 20.

si je cours en dessous de la requête:

Select empname from emp order by desc empno fetch first 10 rows only. 

sortie réelle devrait être: .... 10,9, 1. Mais dans DB2, il reviendra 20,19 .... 11.

Toutes les suggestions les plus appréciées.

Cordialement,

Raj

+0

Quelle est la pertinence de DB2 par rapport à la question? – skaffman

+0

@Skaffman: Oui, il est lié à la base de données Db2. – user569125

+0

La requête fait exactement ce que vous lui demandez dans DB2: vous lui demandez de commander les employés par empno et ensuite sélectionnez les 10 premiers qui seraient 20, 19 ... 11. Quelles sont vos questions exactement? Voulez-vous une requête qui renvoie 10,9, ... 1? Avez-vous eu besoin de le convertir en une requête Hibernate Criteria? –

Répondre

2

Voici comment vous pouvez créer un critère de mise en veille prolongée requête qui renvoie les 10 premières lignes dans l'ordre décroissant:

Critieria crit = session.createCriteria(Employee.class); 
crit.addOrder(Order.desc("empno"); 
crit.setMaxResults(10); 
List<Employee> emps = crit.list(); 

Gardez à l'esprit que cela retournera le employés dans l'ordre décroissant basé sur empno donc il retourne un ensemble de résultats d'empno est comme 20,19, ... 11. C'est ce qu'il est censé faire, indépendamment de la base de données sous-jacente, et autant que je peux dire ce que vous avez demandé. Faites-moi savoir si vous vouliez que ce soit 10,9, ... 1 (ce qui n'est techniquement pas les 10 premières lignes dans l'ordre décroissant).

Editer: Si vous voulez que ce soit 10,9, ... 1 Personnellement, je changerais simplement les critères pour trier dans l'ordre croissant. L'ordre sera 1 ..., mais l'effet 9,10 est le même:

crit.addOrder(Order.asc("empno")); 

Si vous voulez vraiment être 10,9, ... 1 vous pouvez ajouter procédez comme suit si elle devient plus dépendante des données que vous avez. Tout dépend de ce que vous essayez de faire avec les données, mais ceux-ci devraient vous mettre sur la bonne voie.

Critieria crit = session.createCriteria(Employee.class); 
crit.addOrder(Order.desc("empno"); 
crit.setFirstResult(10); 
crit.setMaxResults(10); 
List<Employee> emps = crit.list(); 
+0

Merci.Je veux ce 10,9, ... 1 cette commande. – user569125

+0

J'ai 20 enregistrements, Initialement il affiche 1 ... 10 records.so si je fais le tri, il affichera 10 .... 1.Deuxième: si je clique sur le bouton suivant le critère affiche 11 ... 20.Ici je veux pour trier afficher 20 .... 11.Comment le code ci-dessus va changer, basé sur ce scénario. – user569125