Именованные параметры @Query для репозитория MongoDb Spring

Можно ли использовать именованные параметры для метода @Query в репозитории mongodb, как мы можем это сделать с репозиторием jpa (http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html раздел 2.3.5)?

В качестве примера я хотел бы использовать следующий код:

@Query("{'store' : :store, 'app' : :app }")
List<T> findByStoreAndApp(@Param("store") String store, @Param("app") String app);

вместо:

@Query("{'store' : ?0, 'app' : ?1 }")
List<T> findByStoreAndApp(String store, String app);

person pernacentus    schedule 06.07.2016    source источник


Ответы (2)


Боюсь, что весенняя загрузка действительно предоставляет эту функцию в своем исходном коде.

Вы можете создать интерфейс и расширить MongoRepository. Он предоставляет простой метод, и вам не нужно его реализовывать. Так же, как использовать JpaRepository.

@NoRepositoryBean
public interface MongoRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
    <S extends T> List<S> save(Iterable<S> var1);

    List<T> findAll();

    List<T> findAll(Sort var1);

    <S extends T> S insert(S var1);

    <S extends T> List<S> insert(Iterable<S> var1);
}

Однако, если вам нужно сделать какой-то специальный запрос. Вы можете просто @Autowired MongoTemplate и использовать его собственный метод. А для Redis Springboot даже не предоставляет репозиторий, такой как MongoRepository. Вы можете просто использовать такой шаблон, как StringRedisTemplate, только для операции запроса. Возможно, позже, весенняя загрузка добавит ту же функцию, что и JpaRepository для NoSql. Но сейчас он не предоставляет этой функции.

person H.Hao    schedule 07.07.2016

Возможно, попробуйте:

@Query("{'store' : :#{#store}, 'app' : :#{#app} }")
List<T> findByStoreAndApp(@Param("store") String store, @Param("app") String app);

Поддержка выражений SpEL в @Query была представлена ​​в Spring Data MongoDB 1.8.

person Matthias Baumgart    schedule 16.05.2018