#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<>();