1

我不知道这是否是特定于 Google App Engine for Java 的问题,但如果设置为keywords参数的值是空字符串,则查询不会返回任何内容,即使minPrice设置了 a 也是如此。

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));
4

1 回答 1

2

这就是 GAE 数据存储的工作方式(大多数关系数据库也是这样工作的,顺便说一句!):空值等于任何东西,所以keywords = :keywords你的查询部分在带有空值的记录上是假的keywords——因为那部分是假的,所以也是and, 当然。

您将需要两个查询,一个用于keywords = :keywords“is null”检查,一个用于“is null”检查,并使用它们的两个不相交的结果集(Python GAE 在应用程序级代码中模拟“IN”运算符,我相信 Java GAE 不会,但是由于在这种情况下这些集合不相交的,所以无论如何它确实没有任何神秘或困难;-)。

编辑:它是 Python 中的模拟IN(可在此处使用),而不是 OR;该应用程序级模拟的 Java 等效项IN实际上是contains.

于 2010-09-12T23:42:01.597 回答