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 に答える