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!

JPQL n'est pas SQL; base de données des détails comme l' limit ne sont pas pris en charge.

OriginalL'auteur daniel0mullins | 2013-12-30