【问题标题】:getting null pointer exception when executing query in google app engine在谷歌应用引擎中执行查询时出现空指针异常
【发布时间】:2012-05-06 04:16:33
【问题描述】:

我正在使用带有 gwt 的谷歌应用引擎。 当我通过查询问题访问投票时,我有两个类问题和投票,它给了我空指针异常。

我的班级如下 问题

@PersistenceCapable(identityType=IdentityType.APPLICATION,table="question")
public class Question implements Serializable {

    private static final long serialVersionUID = 6355873282541087204L;

    @PrimaryKey
    @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private String title;

    @Persistent(dependent="true")
    private Vote vote;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Vote getVote() {
        return vote;
    }

    public void setVote(Vote vote) {
        this.vote = vote;
    }

}

投票

@PersistenceCapable(identityType=IdentityType.APPLICATION,table="vote")
public class Vote implements Serializable{


    private static final long serialVersionUID = -1331159194642997258L;

    @PrimaryKey
    @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private int like;

    @Persistent
    private int unlike;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public int getLike() {
        return like;
    }

    public void setLike(int like) {
        this.like = like;
    }

    public int getUnlike() {
        return unlike;
    }

    public void setUnlike(int unlike) {
        this.unlike = unlike;
    }

}

我在 serverImpl 类中的代码

@Override
public List<QuestionDTO> viewAllQuestion() {

    PersistenceManager pm = PMF.get().getPersistenceManager();
    Query query = pm.newQuery(Question.class);

    List<Question> list=null;
    try{
        list = (List<Question>) query.execute();
    }finally{
        pm.close();
    }

    List<QuestionDTO> questionDtoList = new ArrayList<QuestionDTO>();

    for(Question question : list){
        QuestionDTO questionDTO = new QuestionDTO();
        questionDTO.setId(question.getId());
        questionDTO.setTitle(question.getTitle());

        VoteDTO voteDTO = new VoteDTO();
        voteDTO.setId(question.getVote().getId());
        voteDTO.setLike(question.getVote().getLike());
        voteDTO.setUnlike(question.getVote().getLike());            
        questionDTO.setVoteDTO(voteDTO);            

        questionDtoList.add(questionDTO);
    }

    return questionDtoList;
}

错误是

Caused by: java.lang.NullPointerException
    at com.wa.jdocascadedemo.server.impl.QuestionServiceImpl.viewAllQuestion(QuestionServiceImpl.java:86)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
    ... 22 more

我哪里错了? 提前致谢

【问题讨论】:

  • 那么一个 NPE 在你自己的代码中,在你不知道的某行?
  • 我在question.getVote() 行遇到空指针异常,但我不明白为什么它会为空。
  • 正如您提出的另一个问题所述,您可以在检索对象时轻松查看日志,查看生命周期状态等。
  • 是我们查询时单向关系的任何问题。

标签: google-app-engine google-cloud-datastore parent-child jdo


【解决方案1】:

我弄错了。我没有将 defaultFetchGroup = "true" 分配给 Question 类中的 Vote 类对象。 当从数据存储中检索到持久对象时,需要 defaultFetchGroup = "true"。

【讨论】:

  • 或者将该类的字段放在“获取计划”中,参见 JDO 规范和 DN 文档。
猜你喜欢
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
相关资源
最近更新 更多