Как изменить этот запрос, чтобы он возвращал записи, которые удовлетворяют условию minPrice, даже если значение ключевого слова равно null - PullRequest
1 голос
/ 13 сентября 2010

Я не знаю, является ли это проблемой, специфичной для Google App Engine для Java, но если значение, установленное в качестве параметра keywords, является пустой строкой, то из запроса ничего не возвращается, даже если minPrice установлено.

Как изменить этот запрос, чтобы он возвращал записи, удовлетворяющие условию minPrice, даже если значение keywords равно нулю? В идеале я бы как-то использовал один и тот же запрос для обоих условий, не создавая отдельные запросы на основе условия пустой строки.

Query qry = entityManager.createQuery("SELECT p FROM Test p 
 WHERE keywords = :keywords and price >= :minPrice");

qry.setParameter("keywords", keywords);
qry.setParameter("minPrice", Integer.parseInt(minPrice));

1 Ответ

2 голосов
/ 13 сентября 2010

Так работает хранилище данных GAE (кстати, большинство реляционных баз данных работают так же!): Нулевые значения не равны чему-либо, поэтому часть keywords = :keywords вашего запроса ложна для записей с null keywords - поскольку эта часть ложна, то, конечно, and.

Вам понадобятся два запроса, один для keywords = :keywords и один для проверки «является нулевым», и используйте их два непересекающихся набора результатов (Python GAE моделирует оператор «IN» в коде уровня приложения, что, я считаю, Java GAE этого не делает, но поскольку наборы являются непересекающимися, в этом случае на самом деле нет никаких загадок или трудностей; -).

Редактировать : это симулированный IN (который можно было бы использовать здесь) в Python, не OR; Java-эквивалент этого имитируемого на уровне приложения IN на самом деле contains.

...