Google 应用引擎数据查询 returns 0 个结果
Google app engine data query returns 0 results
我正在尝试使用带有 objectify 的 google 应用引擎登录,但由于 Google 用户对象没有足够的信息,我创建了一个本地实体,如下所示:
@Cache
@Entity
public abstract class UserData extends RoleUser implements UserDetails {
protected String firstName;
protected String middleName;
protected String lastName;
protected boolean enabled;
protected String phoneNumber;
@Index
protected String email;
@Index
protected String userName;
我有一个 GoogleUser 的子类,如下所示:
@Subclass
public class GoogleUser extends UserData {
private String googleUserId;
private String authDomain;
最后,我 运行 查看我的自定义实体是否是为特定电子邮件创建的查询如下所示:
public boolean isNewUser(String email){
int count = ofy().load().type(GoogleUser.class).filter("userName =", email).count();
logger.debug("Total accounts for email: |" + email + "| \t Count: " + count);
return count == 0;
}
我遇到的问题是查询 returns 0 结果,即使我在本地 appengine 服务器上通过管理员查看数据存储时看到实体。我在这里束手无策,所以我将不胜感激任何帮助。
我想知道是否
.filter("userName =", email)
应该是
.filter("email =", email)
objectify
默认不索引 subclasses。您必须为每个子 class 显式启用此功能,如下所示:
@Subclass(index=true)
public class GoogleUser extends UserData {
private String googleUserId;
private String authDomain;
请注意,如果您更改了 class 的多态层次结构,您将需要重新保存您的实体以使索引正常工作。
小提示:过滤器中没有运算符意味着 ==
你的查询可以这样写
int count = ofy().load().type(GoogleUser.class).filter("userName", email).list();
我正在尝试使用带有 objectify 的 google 应用引擎登录,但由于 Google 用户对象没有足够的信息,我创建了一个本地实体,如下所示:
@Cache
@Entity
public abstract class UserData extends RoleUser implements UserDetails {
protected String firstName;
protected String middleName;
protected String lastName;
protected boolean enabled;
protected String phoneNumber;
@Index
protected String email;
@Index
protected String userName;
我有一个 GoogleUser 的子类,如下所示:
@Subclass
public class GoogleUser extends UserData {
private String googleUserId;
private String authDomain;
最后,我 运行 查看我的自定义实体是否是为特定电子邮件创建的查询如下所示:
public boolean isNewUser(String email){
int count = ofy().load().type(GoogleUser.class).filter("userName =", email).count();
logger.debug("Total accounts for email: |" + email + "| \t Count: " + count);
return count == 0;
}
我遇到的问题是查询 returns 0 结果,即使我在本地 appengine 服务器上通过管理员查看数据存储时看到实体。我在这里束手无策,所以我将不胜感激任何帮助。
我想知道是否
.filter("userName =", email)
应该是
.filter("email =", email)
objectify
默认不索引 subclasses。您必须为每个子 class 显式启用此功能,如下所示:
@Subclass(index=true)
public class GoogleUser extends UserData {
private String googleUserId;
private String authDomain;
请注意,如果您更改了 class 的多态层次结构,您将需要重新保存您的实体以使索引正常工作。
小提示:过滤器中没有运算符意味着 == 你的查询可以这样写
int count = ofy().load().type(GoogleUser.class).filter("userName", email).list();