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();