Я очень, очень новичок в Hibernate и JPA. Я хочу иметь возможность применять предложения ORDER BY и LIMIT к запросу Hibernate (?), Но у меня ничего не получается. ПРИМЕЧАНИЕ. Я унаследовал этот код.

Вот текущий код:

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;
}

Вместо того, чтобы получать весь список и затем просто возвращать первый результат (который является единственным, который нам нужен), я хотел бы иметь возможность применить предложение LIMIT 0,1, чтобы запрос был быстрее. Кроме того, запрос должен быть отсортирован по убыванию aThing.created, которое является целым числом временной метки UNIX.

Я пробовал изменить queryString вот так:

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";

Но Hibernate по-прежнему возвращает весь набор.

Я смотрел на использование API JPA CriteriaBuilder, но это повредило моему мозгу.

Когда доходит до этого, я абсолютный новичок, и я очень благодарен за любую помощь!

2
daniel0mullins 31 Дек 2013 в 03:36

2 ответа

Лучший ответ

Я думаю тебе нужно

q.setMaxResults(1);

См. Также принятый ответ здесь.

Как сделать лимит-запрос в HQL?

Что касается предложения «заказать по», вы можете включить его в queryString.

7
Community 23 Май 2017 в 11:54

JPQL эквивалент LIMIT start, max:

setFirstResult и setMaxResults:

q.setFirstResult(start); 
q.setMaxResults(limit);
2
Ebru Yener 10 Дек 2016 в 08:19