祖先クエリを実行し、「>」演算子でパラメーターをフィルター処理したいエンティティがいくつかあります。問題のエンティティは別のオブジェクトを継承します(これは重要ではないと思います)。以下は私のエンティティクラスです:
@Indexed
public class ValidatedObject {
public Long timeCreated=System.currentTimeMillis();
public Long timeUpdated=System.currentTimeMillis();
public Long getTimeUpdated() {
return timeUpdated;
}
public void setTimeUpdated(Long timeUpdated) {
this.timeUpdated = timeUpdated;
}
public Boolean validated=false;
@Unindexed
public String validatedID;
@Unindexed
private Long validatedTime;
@Unindexed
private String creatorID;
public Long getTimeCreated() {
return timeCreated;
}
public void setTimeCreated(Long timeCreated) {
this.timeCreated = timeCreated;
}
public boolean isValidated() {
return validated;
}
public void setValidated(boolean validated) {
this.validated = validated;
}
public String getValidatedID() {
return validatedID;
}
public void setValidatedID(String validatedID) {
this.validatedID = validatedID;
}
public Long getValidatedTime() {
return validatedTime;
}
public void setValidatedTime(Long validatedTime) {
this.validatedTime = validatedTime;
}
public String getCreatorID() {
return creatorID;
}
public void setCreatorID(String creatorID) {
this.creatorID = creatorID;
}
}
@Cached
@Entity
public class PersonnelInfo extends ValidatedObject{
@Id
public String keyName;
@Parent Key<Department> department;
private Long fdID;
@Unindexed
private String userKeyName;
private String firstName;
private String lastName;
@Unindexed
private String address,city,county,state;
@Unindexed
private String cellPhone,homePhone,otherPhone;
public PersonnelInfo(){
}
public PersonnelInfo(String email){
keyName=email;
}
@Override
public Long getTimeUpdated() {
return timeUpdated;
}
@Override
public void setTimeUpdated(Long time) {
timeUpdated=time;
}
}
私のクエリコードは次のとおりです。
Query<PersonnelInfo> q = ofy.query(PersonnelInfo.class).ancestor(tmp).filter("timeUpdated >", lastSync);
毎回「一致するインデックスが見つかりません」というエラーが発生します。クエリはフィルタなしで正常に機能します。スキーマを変更したため、一部のエンティティに「timeUpdated」フィールドがありません。timeUpdated値でスキーマが変更された後に作成されたエンティティがいくつかあり、それらは返されません。また、次のようにデータストアビューアでGQLクエリを実行できます。
select * where FROM PersonnelInfo timeUpdated> 0
そして、私は返されるエンティティであり、インデックスが作成されたと信じさせます。私はここで何が間違っているのですか?どんな助けでもいただければ幸いです!