我有一个google appengine项目,我在那里存储用户。
public void createUser(String loginId, String password) {
Entity e = new Entity("User");
e.setProperty("loginId", loginId);
e.setProperty("password", specialPasswordEncryptor(password));
ds.put(e);
}
稍后我想在有人尝试登录时通过loginId搜索用户实体。但问题是String属性没有编入索引。
过去我使用像这样的添加过滤器,它起作用了:
public Entity findUserByLoginId(String loginId) {
Query query = new Query("User").addFilter("loginId",Query.FilterOperator.EQUAL, loginId);
Entity eUser = datastore.prepare(query).asSingleEntity();
return eUser;
}
但是不推荐使用addFilter。我已经尝试过其他方法,但仍然遇到String属性未编入索引的问题,因此我无法在loginId上搜索。
有人能指出我正确的方向吗? 感谢
答案 0 :(得分:1)
字符串属性肯定是can be indexed,除非它们超过1500个字符(javadoc)。
要进行过滤,您需要使用setFilter()
,如下所示:
Query query = new Query("User").setFilter(
new FilterPredicate("loginId", FilterOperator.EQUAL, loginId));