Spring Data MongoDB Repository的findAll字段排除

11

我在使用Spring Data MongoDB Repository时遇到了一个奇怪的问题。 我想从我的findAll请求中排除一个字段。 我该如何实现?

这是完美的:

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

但是findAll没有机会:

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

这会抛出以下异常:

Caused by: org.springframework.data.mapping.PropertyReferenceException: 找不到类型为ObjectHistory的属性findAll! at org.springframework.data.mapping.PropertyPath.(PropertyPath.java:75) at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327) at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307) at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270) at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241) at org.springframework.data.repository.query.parser.Part.(Part.java:76)

2个回答

5

添加一个空的筛选条件就可以为您完成:

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

显然,如果您没有指定“value”参数来过滤结果,Spring Data会尝试从方法名称中推导查询,但不知何故,它无法识别“findAll”的特殊含义。

但我不明白,它在另一个函数中的工作方式与我的相同。 - Sercan Ozdemir
无论如何,感谢您的帮助! - Sercan Ozdemir
在另一种情况下,查询可以从方法名称中推导出来。 - Ali Dehghani

2
由于您在 @Query 注释中没有提供“value”字段,因此 Spring 将尝试将方法名称“findAll”转换为查询,这不符合 Spring 的查询创建规范。请查看规范 here
以下内容应该适用于您:
@Query(value = "{}", fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findAll(Pageable pageable);

那是一个不错的想法,但它是 MongoDB 而不是 JPA,因此您不能使用 JPQL - Ali Dehghani
实际上可以,Spring会将其转换为底层数据存储。请参见Spring Data Mongo官方文档中的此示例。链接 - omahjoub
本文档的第一部分旨在通用,但为了演示目的使用了JPA特定的示例。从http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#reference之后的所有内容都是针对Mongo的。 - Ali Dehghani
如果您将JPQL作为值添加,您将会得到一个JSONParseException - Ali Dehghani
http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/repository/Query.html#value-- - Ali Dehghani
1
@AliDehghani 看起来你是对的,我会编辑我的帖子!!谢谢你的澄清 :) - omahjoub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接