Paramètre ORDER BY et LIMIT clause sur la JPA Requête
Je suis très, très nouveau pour Hibernate et JPA. Je veux être en mesure d'appliquer ORDER BY et LIMIT les clauses relatives à une mise en veille prolongée(?) requête, mais je suis venue vide. REMARQUE: j'ai hérité de ce code.
Voici le code actuel:
public SomeCoolResponse getSomeCoolResponse(String myId) {
String queryString = "select aThing from AWholeBunchOfThings aThing " +
"join aThing.thisOtherThing oThing join oThing.StillAnotherThing saThing " +
"where saThing.subthing.id = :id";
Query q = getEntityManager().createQuery(queryString);
q.setParameter("id", myId);
List<MyThings> list = q.getResultList();
if(list.size() > 0) {
return list.get(0);
}
return null;
}
Plutôt que d'obtenir un ensemble de la liste et ensuite il suffit de retourner le premier résultat (qui est la seule que nous avons besoin), je voudrais être en mesure d'appliquer une LIMIT 0,1
clause de sorte que la requête sera plus rapide. Aussi, la requête doit être triés par ordre décroissant dans aThing.created
qui est un timestamp UNIX entier.
J'ai essayé de modifier queryString
comme ceci:
String queryString = "select aThing from AWholeBunchOfThings aThing " +
"join aThing.thisOtherThing oThing join oThing.StillAnotherThing saThing " +
"where saThing.subthing.id = :id ORDER BY aThing.created LIMIT 0,1";
Mais Hibernate renvoie toujours l'ensemble.
J'ai regardé à l'aide de la JPA CriteriaBuilder API, mais elle a fait mal à mon cerveau.
Je suis un total n00b quand il s'agit de cela, et toute aide est grandement appréciée!
limit
ne sont pas pris en charge.OriginalL'auteur daniel0mullins | 2013-12-30
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez besoin
Voir également accepté de répondre ici.
Comment faites-vous une limite de requête HQL?
À l'ordre "par" clause vous pouvez l'inclure dans le
queryString
.q.getSingleResult()
?Tu veux dire uniqueResult()? Appelez simplement setMaxResults et votre requête sera de retour au plus un record. Si vous regardez le code SQL généré je pense qu'il va contenir la clause LIMIT donc, c'est exactement ce dont vous avez besoin.
Ne pas voir cela comme une option pour
javax.persistence.Query
...OK, je pensais que nous parlions org.mise en veille prolongée.De la requête.
comme je l'ai dit - total n00b
OriginalL'auteur peter.petrov
La JPQL équivalent à la LIMITE de démarrer,max est:
setFirstResult
etsetMaxResults
:OriginalL'auteur Ebru Yener