【问题标题】:QueryDSL isNotEmpty expression failingQueryDSL isNotEmpty 表达式失败
【发布时间】:2015-05-20 04:24:08
【问题描述】:

我正在尝试执行一个表达式,该表达式返回集合属性不为空的一组结果。这是我的课

A.类

@Document
public class A {
  @Id String id;
  String name;
  List<B> matches;
}

B.类

@Document
public class B {
    String name;

}

我的测试用例

@Test
public void testFindWhereCollectionNotEmpty() {

  B b1 = new B();
  b1.name = "b1";

  B b2 = new B();
  b2.name = "b2";

  template.save(b1);
  template.save(b2);

  A a1 = new A();
  a1.id = "p1";
  a1.matches = Arrays.asList(b1, b2);

  A a2 = new A();
  a2.id = "a2";
  a2.matches = new ArrayList<B>();

  A a3 = new A();
  a3.id = "a3";
  a3.matches = null;

  template.save(a1);
  template.save(a2);
  template.save(a3);

  QA qa = QA.a;


  BooleanExpression expr = qa.matches.isNotEmpty();
  Iterable<A> result = aRepo.findAll(expr);

  assertThat(result, is(not((emptyIterable()))));
}

当我执行此测试时,我收到以下错误:

com.mongodb.MongoException: Can't canonicalize query: BadValue $or needs an array
    at com.mongodb.QueryResultIterator.throwOnQueryFailure(QueryResultIterator.java:214)
    at com.mongodb.QueryResultIterator.init(QueryResultIterator.java:198)
    at com.mongodb.QueryResultIterator.initFromQueryResponse(QueryResultIterator.java:176)
    at com.mongodb.QueryResultIterator.<init>(QueryResultIterator.java:64)
    at com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:86)
    at com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:66)
    at com.mongodb.DBCursor._check(DBCursor.java:458)
    at com.mongodb.DBCursor._hasNext(DBCursor.java:546)
    at com.mongodb.DBCursor.hasNext(DBCursor.java:571)
    at com.mysema.query.mongodb.MongodbQuery.list(MongodbQuery.java:253)
    at org.springframework.data.mongodb.repository.support.QueryDslMongoRepository.findAll(QueryDslMongoRepository.java:102)

您可以通过https://github.com/tedp/spring-querydsl-test自己尝试一下

我做错了吗?

【问题讨论】:

  • 您使用哪个 Querydsl 版本?
  • 我创建了一个问题来跟踪这个:github.com/querydsl/querydsl/issues/1264
  • @TimoWestkamper,我使用的是 3.6.2 版。
  • @Ted 我们已经修复了 3.6.3 中的错误,明天应该会发布。

标签: spring-data-mongodb querydsl


【解决方案1】:

这个问题现已在 QueryDSL 3.6.3 版中得到修复。请参阅https://github.com/querydsl/querydsl/issues/1264 了解更多信息。

非常感谢所有参与修复的人!

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 2018-04-24
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多