首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDO javax.jdo.JDOFatalUserException

JDO javax.jdo.JDOFatalUserException
EN

Stack Overflow用户
提问于 2014-08-17 00:12:19
回答 1查看 81关注 0票数 0

首先,在这方面我是个菜鸟。因此,我试图使用GWT2.6.1和GAE1.9.9构建一个WebApp。

我做过这样的事..。

代码语言:javascript
复制
@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;
    ...
}

然后,

代码语言:javascript
复制
@PersistenceCapable
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
public abstract class User extends Person implements IsSerializable{

    @Persistent
    private String email;
    ...
}

最后,

代码语言:javascript
复制
@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:http://code.google.com/appengine/docs/java/datastore/dataclasses.html#Inheritance中使用继承的信息,请参阅文档

我看了文档,但我仍然不明白我做错了什么。有人能给我个提示吗?

PS.:我知道,我知道,我计划在将来给管理员和用户添加一些新的属性。基本上,我要做的是检查用户是否使用GoogleID在数据库中注册,然后根据其AccountType重定向到指定的URL (可能是Admin、SuperUser、Auditor .)。我在做这样的事情:

代码语言:javascript
复制
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;
}

谢谢你的支持!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-21 22:46:41

“新表”继承策略允许您将单个数据对象的数据拆分为多个“表”,但是由于operating数据存储不支持联接,因此使用该继承策略对数据对象进行操作需要对每个继承级别进行远程过程调用。这可能非常低效率,因此数据类不支持“新表”继承策略,而这些数据类并不是继承层次结构的根源。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25345179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档