Вопрос по – Запрос с помощью sort () и limit () в интерфейсе репозитория Spring

16

Я новичок в Spring Data с MongoDB и хотел бы иметь автоматически генерируемый метод запроса в моем интерфейсе расширения MongoRepository, который требует фильтрации, сортировки и ограничения.

Запрос выглядит так:

// 'created' is the field I need to sort against

find({state:'ACTIVE'}).sort({created:-1}).limit(1)

Интерфейс хранилища выглядит следующим образом:

public interface JobRepository extends MongoRepository<Job, String> {
    @Query("{ state: 'ACTIVE', userId: ?0 }")
    List<Job> findActiveByUserId(String userId);

    // The next line is the problem, it wont work since
    // it's not in the format @Query expects
    @Query("find({state:'ACTIVE'}).sort({created:-1}).limit(1)")
    Job findOneActiveOldest();

    ...
}

Я знаю, что можно добавить аргумент Sort к методу запроса, чтобы получить сортировку, но проблема заключается в ограничении результатов одним объектом. Можно ли обойтись без написания пользовательских JobRepositoryImpl?

Спасибо

Редактировать:

Пример того, что я ищу:

@Query("{ state:'ACTIVE', $orderby: {created:-1}, $limit:1 }")
Job findOneActiveOldest();

или же

@Query("{ state:'ACTIVE' }")
@Sort("{ created:-1 }")
@Limit(1)
Job findOneActiveOldest();

Но это, очевидно, не работает :(

Ваш Ответ

2   ответа
9

Direction.DESC и неDirections.DESC и порядок параметров неправильный.

Изменить :

PageRequest request = new PageRequest(0, 1, new Sort("created", Directions.DESC));

чтобы:

PageRequest request = new PageRequest(0, 1, new Sort(Direction.DESC, "created"));
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededthis discussionError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
33

public interface JobRepository extends MongoRepository<Job, String> {

  @Query("{ state : 'ACTIVE' }")
  Page<Job> findOneActiveOldest(Pageable pageable);
}

и используя его:

// Keep that in a constant if it stays the same
PageRequest request = new PageRequest(0, 1, new Sort(Sort.Direction.DESC, "created"));
Job job = repository.findOneActiveOldest(request).getContent().get(0);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded m1h4
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded m1h4

Похожие вопросы