Java Play Framework finder с запросом if else

#java #playframework-2.0

#java #playframework-2.0

Вопрос:

Я написал следующий фрагмент кода для выполнения выборочных запросов, но, похоже, он не работает.

 public static List<Item> selectBy(String name, String attr) {
    Query<Item> find = myFinderInstance;
    if (name != null) {
        find.where().eq("name", name);
    }
    if (attr != null) {
        find.where().eq("attr", attr);
    }

    return find.findList();
}
 

В принципе, я хочу, чтобы запрос мог работать вместе. Либо только по имени, только по атрибуту, либо и то, и другое. Но только с 1 функцией.

Это невозможно или я делаю это неправильно?

Ответ №1:

Вы можете добавить параметры условно к ExpressionList , в этом случае, если все параметры будут равны нулю, он вернет ВСЕ объекты:

 import com.avaje.ebean.ExpressionList;
import static com.avaje.ebean.Expr.eq;

// ...

public static List<Item> findByNameAndAttr(String name, String attr) {

    ExpressionList<Item> myQuery = find.where();

    if (name != null) myQuery.add(eq("name", name));
    if (attr != null) myQuery.add(eq("attr", attr));

    return myQuery.findList();
}
 

необязательно, если вы предпочитаете пустой набор, если оба параметра null просто запустите свой метод с условием:

 if (name == null amp;amp; attr == null) return new ArrayList<>();