Перенос запроса из JPQL в монго с использованием критериев весенних данных монго

Я перенес некоторые из моих Entity из 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));

этот запрос возвращает arraylist нулевого размера. Затем я изменил orNameCriteria на использование предложения is и убедился, что данные, содержащиеся в переменной name, имеют / в качестве суффикса и префикса. Это тоже не сработало.

но запросы от mongoVue и RockMongo клиентов:

{ firstName: /SAM/}

возвращает данные.

Вопрос 1. Как написать LIKE CLAUSE с помощью spring-data-mongo Criteria?
Вопрос 2: это правильный способ используйте или и и предложение с criteria

Спасибо за чтение


person black sensei    schedule 21.11.2012    source источник


Ответы (2)


Criteria.where("field").regex(шаблон) должен работать

person pshirishreddy    schedule 01.03.2013

Поскольку у меня нет возможности добавлять комментарии...

Если вы сделаете статический импорт в Criteria, ваши предложения where будут выглядеть намного лучше.

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

person Seth    schedule 18.12.2014