Spring数据mongodb存储库findAll字段排除

时间:2016-02-11 08:19:13

标签: java spring mongodb repository spring-data-mongodb

我对spring数据mongodb存储库有一个奇怪的问题..我想从我的findAll请求中排除一个字段。我怎样才能做到这一点?

这非常有效:

@Query(fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findByObjectIdAndServiceIgnoreCase( String objectId, String service, Pageable pageable );

findAll没有机会:

@Query(fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findAll( Pageable pageable );

这引发:

  

引起:   org.springframework.data.mapping.PropertyReferenceException:没有   属性find找到类型ObjectHistory!在   org.springframework.data.mapping.PropertyPath。(PropertyPath.java:75)     在   org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327)     在   org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307)     在   org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270)     在   org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241)     在   org.springframework.data.repository.query.parser.Part。(Part.java:76)

2 个答案:

答案 0 :(得分:3)

添加空的过滤条件将为您提供帮助:

@Query(value = "{}", fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findAll(Pageable pageable);

显然,当您未指定value参数来过滤结果时,Spring Data会尝试从方法名称派生查询,并以某种方式,无法识别findAll的特殊含义。

答案 1 :(得分:2)

由于您没有为@Query注释提供字段,因此Spring会尝试将方法名 findAll 转换为不尊重查询创建的查询Spring的规格。 请查看规范here

这应该适合你:

@Query(value = "{}", fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findAll(Pageable pageable);