1

これがGoogle App Engine for Java特有の問題かどうかはわかりませんが、keywordsパラメータとして設定した値がnull Stringの場合、aminPriceを設定してもクエリから何も返されません。

このクエリを変更して、値が nullminPriceの場合でも条件を満たすレコードを返すようにするにはどうすればよいですか? keywords理想的には、null 文字列条件に基づいて別のクエリを作成せずに、両方の条件に同じクエリを使用することです。

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 データストアが機能する方法です (ほとんどのリレーショナル データベースもそのように機能します、ところで!): null は何にも等しくないkeywords = :keywordsため、 null を含むレコードではクエリの一部が false になりますkeywords。その部分が false であるため、and、 もちろん。

「is null」チェック用と「is null」チェック用の2 つのクエリが必要keywords = :keywordsになり、それらの 2 つの互いに素な結果セットを使用します (Python GAE は、アプリ レベルのコードで「IN」演算子をシミュレートしますが、Java GAE はそうではないと思います。しかし、この場合、セットバラバラなので、とにかく謎や難しさはありません;-)。

編集IN:これは、Pythonでシミュレートされた(ここで使用できる)ものであり、ではありません OR。その app-level-simulated に相当する JavaINは実際にはcontains.

于 2010-09-12T23:42:01.597 に答える