【问题标题】:Spring Data MongoDB NotLike - Unsupported keywordSpring Data MongoDB NotLike - 不支持的关键字
【发布时间】:2016-04-18 16:41:18
【问题描述】:

我已经配置了一个 Spring Data Repository (mongoDB) 和 Author 实体如下:

Repository :
   public interface AuthorRepository extends MongoRepository< Author, Long > {
        Iterable<Author> findByFirstName( String personName );
        Iterable<Author> findByFirstNameLike( String personName );
        Iterable<Author> findByFirstNameNotLike( String firstName );
    }
Entity Class :   
    @Document( collection = "author" )
    @Data
    public class Author {
        @Id
        private String          id;

        private String          firstName;

      //..
    }

我能够运行前两个查询而没有任何错误。但是“NotLike”方法给了我以下运行时错误:

Caused by: java.lang.IllegalArgumentException: Unsupported keyword!
    at org.springframework.data.mongodb.repository.query.MongoQueryCreator.from(MongoQueryCreator.java:252) ~[spring-data-mongodb-1.8.4.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.query.MongoQueryCreator.create(MongoQueryCreator.java:114) ~[spring-data-mongodb-1.8.4.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.query.MongoQueryCreator.create(MongoQueryCreator.java:58) ~[spring-data-mongodb-1.8.4.RELEASE.jar:na]
    ...

我查看了MongoQueryCreator.from(MongoQueryCreator.java:252),发现Part.Type.NOT_LIKE 没有在switch-case 语句上处理,它的抛出IllegalArgumentException("Unsupported keyword!");

Spring Data MongoDB latest documentation (1.8.4.RELEASE) 表示 NotLike 是受支持的查询关键字。但在实现中似乎缺少它。

这里有什么遗漏或者我应该提出一个错误修复吗?

【问题讨论】:

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


【解决方案1】:

Spring Data MongoDB 最新文档 (1.8.4.RELEASE) 说 NotLike 是受支持的查询关键字。但它似乎缺少在 实施。

NotLike 在 Spring Data MongoDB 的当前 (1.9.1) 版本中仍然不受支持 - 请参阅 Table 5. Supported keywords for query methods

这里有什么遗漏或者我应该提出一个错误修复吗?

不是bug修复,因为运行时错误与不支持关键字一致,但可以在Spring Data MongoDB JIRA上打开特性请求。

同时,为了让您的代码运行,您可以实现自己的 findByFirstNameNotLike 方法,使用 Query 注释,甚至将 Querydsl 用于 more complex queries

【讨论】:

  • 我已经打开 DATAMONGO-1424 以添加对 notLike 的支持。
  • 谢谢@ChristophStrobl。您认为请求支持其他“Like”或“Regex”关键字是否合理,例如“InRegex”(匹配正则表达式数组)和NotInRegex?我过去本可以使用它,而且我已经在 SO 上看到过类似的问题几次了。
  • 请在Jira 中为inRegexnotInRegex 打开一个问题,以便有机会投票。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
相关资源
最近更新 更多