0

我已经将我的一些Entityfrom移植JPA到文档,现在移植我的一些查询。这是 JPA 查询:

em.createQuery("select distinct c from CustomerImpl c left join fetch c.addresses ca where (:name is null or c.firstName LIKE :name or c.lastName LIKE :name) and (:ref is null or c.externalReference LIKE :ref) and (:city is null or ca.city LIKE :city) order by c.firstName").setParameter("name", name).setParameter("ref", customerRef).setParameter("city", city).getResultList();

以下是我的尝试:

    Criteria orNameCriteria = new Criteria().orOperator(Criteria.where("firstName").is(null), Criteria.where("firstName").is(name), Criteria.where("lastName").is(name));
    Criteria orCustomerRefCriteria = new Criteria().orOperator(Criteria.where("externalReference").is(null), Criteria.where("externalReference").regex(customerRef,"i"));
    Criteria orAddress = new Criteria().orOperator(Criteria.where("addresses.city").is(null), Criteria.where("addresses.city").regex(city, "i"));
    Query nameq = new Query(new Criteria().andOperator(orNameCriteria,orCustomerRefCriteria,orAddress));

此查询返回零大小的数组列表。然后我更改了orNameCriteria使用 is 子句并确保name变量中包含的数据具有/后缀和前缀。那也没有用。

但来自客户mongoVue的查询:RockMongo

{ firstName: /SAM/}

返回数据。

问题 1:如何使用 spring-data-mongo编写LIKE CLAUSECriteria
问题2:使用 or 和 and 子句的正确方法是criteria

谢谢阅读

4

2 回答 2

0

Criteria.where("field").regex(pattern) 应该可以工作

于 2013-03-01T13:13:57.980 回答
0

由于我没有添加评论的能力...

如果您对 Criteria 进行静态导入,它将使您的 where 子句看起来更好。

Criteria orAddress = new Criteria().orOperator(where("addresses.city").is(null), where("addresses.city").regex(city, "i"));

于 2014-12-18T14:42:35.080 回答