Google应用引擎数据查询返回0结果

时间:2016-07-31 19:26:42

标签: java google-app-engine objectify

我尝试使用带有客观化的谷歌应用引擎登录,但由于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;
} 

我遇到的问题是,即使我在本地appengine服务器上通过admin查看数据存储区时看到实体,查询也会返回0结果。我在绳子的尽头,所以我很感激任何帮助。

2 个答案:

答案 0 :(得分:2)

默认情况下,

import os try: res = os.popen("ping -c 4 www.google.com") except IOError: print "ISPerror: popen" try: #wait = [0,0] wait = os.wait() except IOError: print "ISPerror:os.wait" if wait[1] != 0: print(" os.wait:exit status != 0\n") else: print ("os.wait:"+str(wait)) print("before read") result = res.read() print ("after read:") print ("exiting") 不会为子类编制索引。您必须为每个子类显式启用它,如下所示:

objectify

请注意,如果您更改了类的多态层次结构,则需要重新保存实体以便将索引工作。

小提示:过滤器中没有操作符意味着== 您的查询可以像这样写

@Subclass(index=true)
public class GoogleUser extends UserData {

    private String googleUserId;
    private String authDomain;

答案 1 :(得分:0)

我想知道是否

.filter("userName =", email)

应该是

.filter("email =", email)