11

ユーザーの電子メールまたは名前が特定の文字列で始まるかどうかを確認するクエリを作成しようとしています。SQLクエリでは、これを使用して記述します

name like 'queryString%' or email like 'queryString%'

ebean クエリでは、次のようなものを書くことを期待しています。

find.where().or(like('name', 'queryString%'), like('email', 'queryString%'));

問題は、 or が式リストではなく式を受け取ることです。これは、私が書いているときに得られるものです

find.where().like(...,...)

私が理解しているように、次のようなクエリを実行しています。

find.where().like(.., ...).like(..., ...)

AND を使用しています。

ebean を使用してそのようなクエリを作成するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

26

2 回目の試行はほとんど問題ありませんcom.avaje.ebean.Expr.like()or()

find.where().or(
        com.avaje.ebean.Expr.like("email", email + "%"),
        com.avaje.ebean.Expr.like("name",  name + "%")
).findUnique(); 

もちろん、短いコードのインポートを使用できます::

import com.avaje.ebean.Expr;

...
find.where().or(Expr.like("email", email + "%"),Expr.like("name", name + "%")).findUnique();

Javadoc で API を確認してください: http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/Expr.html

于 2012-08-30T06:22:53.067 に答える
7

disjunction()、connection()、および endJunction() を介して流動的なスタイルを使用することもできることに注意してください。

例えば:

Query<Conversation> query = Ebean.find(Conversation.class)
  .where().eq("group.id", groupId)
  .disjunction()
    .conjunction()
      .eq("open", false).eq("participants.user.id", userId)
    .endJunction()
    .eq("open", true)
  .endJunction()
  .orderBy("whenCreated desc");

また、タイプ セーフなクエリ Bean を使用した例も似ていますが、disjunction()/conjunction() などではなく、or()、and()、endAnd()、endOr() ... を使用しています。

List<Customer> customers
  = new QCustomer()
  .billingAddress.city.equalTo("Auckland")
  .version.between(1,100)
  .billingAddress.country.equalTo(nz)
  .registered.before(new Date())
  .or()
    .id.greaterThan(1)
    .and()
      .name.icontains("Jim")
      .inactive.isTrue()
    .endAnd()
  .endOr()
  .orderBy()
    .name.asc()
    .id.desc()
  .findList();
于 2015-12-02T18:58:52.590 に答える
2

クエリは、disjunction() を使用して流動的なスタイルで記述できることに注意してください。

find.where().disjunction()
  .like("email", email + "%")
  .like("name",  name + "%")
  .findUnique(); 

複数の disjunction() / junction() がある場合は、endJunction()その OR および AND グループを終了するために使用します。

この例では、必要な OR グループは 1 つだけなので、endJunction()必要ありません。

于 2015-09-09T01:24:42.887 に答える
-1

約2つ以上、これを試すことができます...

where.or(Expr.contains("name", inquire.q),
                    Expr.or(Expr.contains("address", inquire.q), Expr.contains("description", inquire.q)));
于 2015-04-30T15:36:25.013 に答える