首先,在这方面我是个菜鸟。因此,我试图使用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 abstract class User extends Person implements IsSerializable{
@Persistent
private String email;
...
}最后,
@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 .)。我在做这样的事情:
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;
}谢谢你的支持!
发布于 2014-08-21 22:46:41
“新表”继承策略允许您将单个数据对象的数据拆分为多个“表”,但是由于operating数据存储不支持联接,因此使用该继承策略对数据对象进行操作需要对每个继承级别进行远程过程调用。这可能非常低效率,因此数据类不支持“新表”继承策略,而这些数据类并不是继承层次结构的根源。
其次,“超类表”继承策略允许您将数据对象的数据存储在其超类的“表”中。虽然这一战略没有固有的低效率,但目前没有得到支持。我们可能会在以后的发行版中重新讨论这个问题。
好消息是:“子类表”和“完整表”策略可以像DataNucleus文档中描述的那样工作,您还可以对任何位于继承层次结构根的数据对象使用“新表”。
https://stackoverflow.com/questions/25345179
复制相似问题