Google app engine JDO javax.JDO.JDOFatalUserException

Google app engine JDO javax.JDO.JDOFatalUserException,google-app-engine,gwt,jdo,Google App Engine,Gwt,Jdo,首先,我有点不知道这件事。因此,我正在尝试使用GWT2.6.1和GAE1.9.9构建一个WebApp 我做过这样的事 @PersistenceCapable @Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE) public abstract class Person implements IsSerializable { @PrimaryKey @Persistent private String go

首先,我有点不知道这件事。因此,我正在尝试使用GWT2.6.1和GAE1.9.9构建一个WebApp

我做过这样的事

@PersistenceCapable
@Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE)
public abstract class Person implements IsSerializable {

    @PrimaryKey
    @Persistent
    private String googleUserID;
    @Persistent
    private String name;
    @Persistent
    private String secondName;
    @Persistent
    private String surname;
    @Persistent
    private Boolean isActive = false; //default value
    @Persistent
    private String imageURL;
    ...
}
那么

最后

@PersistenceCapable
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
public class Admin extends User implements IsSerializable, Serializable {

    private static final long serialVersionUID = 1L;

    @NotPersistent
    public static final AccountTypes accountType = AccountTypes.Admin;
    ...
}
然后我得到以下错误:

javax.jdo.JDOFatalUserException:在epusp.pcs.os.model.person.user.Admin上找到了继承策略新表。在这种情况下不支持此策略。有关将继承与JDO一起使用的信息,请参阅文档:

我阅读了文档,但我仍然不明白我做错了什么。谁能给我一个提示吗

注:我知道,我知道,我计划在将来为管理员和用户添加一些新属性。基本上,我想做的是检查一个用户是否使用GoogleID在数据库中注册,然后根据他的帐户类型将其重定向到指定的URL。可能是管理员、超级用户、审计员。。。。我是这样做的:

PersistenceManager pm = PMF.get().getPersistenceManager();
Admin user = null;
try{
    user = pm.getObjectById(User.class, userId);
}finally{
    pm.close();
}
switch(user.getType()){
case Admin:
    return "";
case Agent:
    return "";
case Auditor:
    return "";
case Monitor:
    return "";
case SuperUser:
    return "";
default:
    return null;
}

谢谢你的支持

新的表继承策略允许您将单个数据对象的数据拆分到多个表中,但由于App Engine数据存储不支持联接,因此使用此继承策略对数据对象进行操作需要对每个继承级别进行远程过程调用。这可能非常低效,因此新的表继承策略在不在继承层次结构根的数据类上不受支持

其次,超类表继承策略允许您将数据对象的数据存储在其超类的表中。虽然这一战略没有内在的低效性,但目前尚未得到支持。我们可能会在以后的版本中重新讨论这个问题

现在好消息是:子类表和完整表策略按照DataNucleus文档中的描述工作,您还可以对位于继承层次结构根的任何数据对象使用新表

PersistenceManager pm = PMF.get().getPersistenceManager();
Admin user = null;
try{
    user = pm.getObjectById(User.class, userId);
}finally{
    pm.close();
}
switch(user.getType()){
case Admin:
    return "";
case Agent:
    return "";
case Auditor:
    return "";
case Monitor:
    return "";
case SuperUser:
    return "";
default:
    return null;
}