0

これが私が仕事に取り掛かろうとしているコードスニペットです:

final Query query = pm.newQuery("SELECT FROM model.Strip WHERE publishOn <= startDate
&& endDate >= publishOn PARAMETERS Date startDate, Date endDate import java.util.Date");

クエリを実行しているのは1つのパラメータのみなので、これはGoogleドキュメントに従って機能するはずです。

不等式フィルターは1つのプロパティでのみ許可されますクエリは、すべてのフィルターの1つのプロパティで不等式フィルター(<、<=、> =、>、!=)のみを使用できます。たとえば、次のクエリが許可されます。

import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.FilterOperator;
import com.google.appengine.api.datastore.Query.SortDirection;

Query q = new Query("Person");
q.addFilter("birthYear", FilterOperator.GREATER_THAN_OR_EQUAL, minBirthYearParam);
q.addFilter("birthYear", FilterOperator.LESS_THAN_OR_EQUAL, maxBirthYearParam);

もちろん、これは低レベルのデータストアインターフェイスを使用していますが、JDOの実装でもそれを使用していると思います。

しかし、クエリを実行すると、この役に立たないエラーメッセージが表示されます。

org.datanucleus.store.appengine.query.DatastoreQuery $ UnsupportedDatastoreFeatureException:query =publishOnパラメータの問題DatestartDate、Date endDate import java.util.Date>:クエリの解析中に予期しない式のタイプ:org.datanucleus.query.expression.ParameterExpression

誰かがこのような範囲クエリを実行する方法を知っていますか

4

1 に答える 1

3

私はそれを考え出した 。. .

final Query query = pm.newQuery("SELECT FROM model.Strip WHERE publishOn <= startDate
&& endDate >= publishOn PARAMETERS Date startDate, Date endDate import java.util.Date");

に変更

final Query query = pm.newQuery("SELECT FROM model.Strip WHERE this.publishOn >= startDate
&& this.publishOn <= endDate PARAMETERS java.util.Date startDate, java.util.Date endDate");

変数の前にプロパティを配置する必要がありますが、this.どちらも害はありません

JDO/JPAObjectify に切り替えたので、これらの愚かなセマンティクスと戦わなければなりません!

于 2011-02-10T06:50:14.007 に答える