Как запросить даты в репозитории Spring Data MongoDB? - PullRequest
11 голосов
/ 18 ноября 2011

Объект моего домена -

Person{
    String name;
    Date born;
}

, и у меня есть PersonRepository

PersonRepository{
    @Query(value="{'born': {$gt: new Date(?0)} }")
    findPerson(Date bornAfter);
}

Я пытаюсь получить всех лиц, родившихся после определенной даты.Это не работает, хотя.Что мне не хватает?Формат даты для 'born' в консоли mongodb выглядит следующим образом:

ISODate("2011-11-16T09:46:33.750Z")

Я попытался найти для этого тестовый модуль / интеграционный тест в источнике data-jpa.Не могу найти ни одного.Может кто-нибудь указать мне на это?

Ответы [ 2 ]

9 голосов
/ 18 ноября 2011

Итак, сначала вы должны убедиться, что не перепутали Spring Data JPA с Spring Data MongoDB. Я не думаю, что какая-то часть вопроса на самом деле нацелена на некоторые вещи JPA. Вот как может выглядеть ваш репозиторий:

public interface PersonRepository extends Repository<Person, Long> {

  // Query generated from the method name
  List<Person> findByBornGreaterThan(Date born);

  @Query("{'born' : { '$gt' : ?0 }}")
  List<Person> findPersons(Date born);
}

Последний не работает для 1.0.1.RELEASE, и я создал для этого тикет и уже исправил его в следующих версиях 1.0.2.RELEASE и 1.1.0.M1. Так что, возможно, вы захотите получить снимок сборки, чтобы попробовать его. Я также создал тикет для добавления Before и After к поддерживаемым ключевым словам для более интуитивного использования, чем позволяют LessThan и GreaterThan.

0 голосов
/ 08 ноября 2018

Либо используйте аннотацию @Query, либо используйте ключевые слова в имени метода.Я бы посоветовал просто придерживаться ключевых слов в названии метода.Что означает, что эту аннотацию можно удалить.Значит, List<Person> findByBornGreaterThan(Date born); будет работать только.Вы можете сослаться на https://docs.spring.io/spring-data/mongodb/docs/1.2.0.RELEASE/reference/html/repositories.html для получения дополнительной информации.

...