使用spring data mongo Criteria将查询从JPQL移植到mongo

时间:2012-11-21 10:55:22

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

我已将部分EntityJPA移植到文档中,现在移植了一些查询。 这是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));

此查询返回零大小的arraylist。然后我将orNameCriteria更改为使用is子句,并确保name变量中包含的数据具有/作为后缀和前缀。这没效果。

但来自mongoVueRockMongo客户的查询:

{ firstName: /SAM/}

返回数据。

问题1 :您如何使用spring-data-mongo Criteria撰写 LIKE CLAUSE 问题2 :这是使用or和criteria

的正确方法

感谢您阅读

2 个答案:

答案 0 :(得分:0)

Criteria.where(“field”)。正则表达式(模式)应该起作用

答案 1 :(得分:0)

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

如果你在Criteria上进行静态导入,它会使你的where子句看起来好多了。

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

相关问题