0

运行 junit test 时出现此错误

Testcase: testGet_User(Authentication.UserManagerTest):        Caused an ERROR
null
java.lang.NullPointerException
        at org.datanucleus.store.appengine.query.DatastoreQuery.getMappingForFieldWithName(DatastoreQuery.java:1307)
        at org.datanucleus.store.appengine.query.DatastoreQuery.addLeftPrimaryExpression(DatastoreQuery.java:1107)
        at org.datanucleus.store.appengine.query.DatastoreQuery.addExpression(DatastoreQuery.java:871)
        at org.datanucleus.store.appengine.query.DatastoreQuery.addFilters(DatastoreQuery.java:832)
        at org.datanucleus.store.appengine.query.DatastoreQuery.performExecute(DatastoreQuery.java:230)
        at org.datanucleus.store.appengine.query.JDOQLQuery.performExecute(JDOQLQuery.java:89)
        at org.datanucleus.store.query.Query.executeQuery(Query.java:1489)
        at org.datanucleus.store.query.Query.executeWithArray(Query.java:1371)
        at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:243)
        at Authentication.UserManager.get(UserManager.java:86)
        at Authentication.UserManagerTest.testGet_User(UserManagerTest.java:110)

获取代码是:

public static UserBean get(User user) {
    PersistenceManager pm = PMF.get();

    // get user with id
    Query query = pm.newQuery(UserCommon.class);
    query.setFilter("id == idParam");
    query.declareParameters("String idParam");
    System.out.println("\t\tID:" + user.getUserId());
    List<UserCommon> userDatas = (List<UserCommon>) query.execute(user.getUserId());

我有看起来的持久类:

@PersistenceCapable(detachable="true")
@Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE)
public abstract class UserCommon {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private String id;

@PersistenceCapable(detachable="true")
public class Professor extends UserCommon {

@PersistenceCapable(detachable="true")
public class Student extends UserCommon {

基本上,我想要两种类型的用户。但是在登录时,我拥有的唯一信息是他们的 ID。因此,我试图查询基类而不是教授或学生。但是,我得到了 NullPointerException。

对我犯错的地方有什么建议吗?

提前致谢 !

4

1 回答 1

0

App Engine JDO 对继承的支持有限,不支持多态http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html#Polymorphic_Relationships 这包括查询。

我个人建议使用其他一些持久性包装器而不是JDO,例如http://code.google.com/p/objectify-appengine/http://code.google.com/p/twig-persist/更好地利用 GAE 的优势。

于 2011-03-11T15:01:38.880 回答