【发布时间】:2014-10-10 07:07:01
【问题描述】:
首先,我在这方面有点菜鸟。所以,我正在尝试使用 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 上找到继承策略“new-table”。在这种情况下不支持此策略。有关使用 JDO 继承的信息,请参阅文档:http://code.google.com/appengine/docs/java/datastore/dataclasses.html#Inheritance
我阅读了文档,但我仍然不明白我做错了什么。谁能给个提示?
PS.:我知道,我知道,我计划在未来为 Admin 和 User 添加一些新属性。基本上我想做的是检查用户是否使用 GoogleID 在数据库中注册,然后根据他的 AccountType 将他重定向到指定的 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;
}
感谢支持!
【问题讨论】:
标签: google-app-engine gwt jdo