JPA рассчитывает рейтинг по упорядоченному выбору - PullRequest
0 голосов
/ 13 марта 2012

Скажите, у меня есть следующая таблица.

USER_POINT
  USER_ID    | BIGINT | PK
  USER_POINT | BIGINT |

USER_POINT может постоянно обновляться.
С учетом USER_ID я хочу номер расстояния от вершины в выборе, упорядоченный по USER_POINT.

SEQ    USER_ID  USER_POINT
-----  -------  -----------
00001  232132   32423423432
00002  023944   32423423431
.....  ......   ...........
01007  000034   xxxxxxxxxxx // I want to know the 01007 with given 000034

Я еще не запрограммирован, но вот какой-то псевдокод, который я собираюсь попробовать.

public int getRank(final Long userId) {
    final int pageSize = 500;
    int pageCount = 0;
    int firstResult = 0;
    for (int firstResult = 0; true; firstResult += pageSize) {
        final Query query = em.createQuery(
            "SELECT u.id FROM UserPoint u ORDER BY u.point");
        query.setFirstResult(firstResult);
        query.setMaxResults(pageSize);
        final List orders = query.getResultList();
        if (orders.isEmpty()) {
            break;
        }
        final int index = orders.indexOf(userId);
        if (index != -1) {
            return pageSize * pageCount + index;
        }
        pageCount++;
    }
    return -1;
}

Я хочу спросить

Is this the right way?
Is this the only way?

Спасибо.

1 Ответ

1 голос
/ 13 марта 2012

JPQL не поддерживает такие запросы.Вы должны использовать SQL для таких запросов, если вы хотите сделать их эффективными.

В Oracle такой запрос будет выглядеть как

select r from (select user_id, user_point, rownum as r 
               from user_point 
               order by user_point desc) where user_id = 34
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...