0

junitテストを実行するとこのエラーが発生します

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)

getのコードは次のとおりです。

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 {

基本的には2種類のユーザーが欲しいです。しかし、ログインしている間、私が持っている情報は彼らのIDだけです。したがって、私は教授や学​​生ではなく、基本クラスでクエリを実行しようとしていました。ただし、NullPointerExceptionが発生しました。

私が間違えた場所への提案はありますか?

前もって感謝します !

4

1 に答える 1

0

App Engine JDOの継承のサポートは制限されており、ポリモーフィックサポートはありません。http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html#Polymorphic_Relationships これにはクエリが含まれます。

個人的には、 http ://code.google.com/p/objectify-appengine/やhttp://code.google.com/p/twig-persist/など、JDOではなく他の永続性ラッパーを使用することを お勧めします。 GAEの利点を利用したより良い仕事。

于 2011-03-11T15:01:38.880 に答える