【问题标题】:Spring data mongodb repository findAll field exclusionSpring Data MongoDB 存储库 findAll 字段排除
【发布时间】:2016-05-21 21:59:51
【问题描述】:

我对 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:否 找到类型 ObjectHistory 的属性 findAll!在 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)

【问题讨论】:

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


    【解决方案1】:

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

    这应该适合你:

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

    【讨论】:

    • 这是一个有效的想法,但它是MongoDB 而不是JPA,所以你不能使用JPQL。
    • 其实可以,Spring会转换为底层的Data store。请参阅 Spring Data Mongo 官方文档中的this example。
    • 本文档的第一部分是一般性的,但出于演示目的使用了JPA 特定示例。 docs.spring.io/spring-data/mongodb/docs/current/reference/html/… 之后的所有内容都用于 mongo
    • 如果你添加一个JPQL作为值,你会得到一个JSONParseException
    • @AliDehghani 看来你是对的,我会编辑我的帖子!谢谢你的澄清:)
    【解决方案2】:

    添加一个空的过滤条件将为您解决问题:

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

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

    【讨论】:

    • 但我不明白,它在其他功能上和我一样工作
    • 感谢您的帮助!
    • 在另一种情况下,查询可从方法名称派生。
    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 2018-01-02
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2014-05-31
    相关资源
    最近更新 更多