Objectify:无法评估表达式抛出'com.googlecode.objectify.LoadException'异常

时间:2016-09-04 07:52:57

标签: java google-app-engine intellij-idea objectify

我正在学习如何使用Google应用引擎存储和检索数据并客观化,并在intellij-idea中设置测试项目。我创建了一个看起来像这样的简单实体:

ContactType

@Entity
public class ContactType {

@Id
public Long id;
public String name;

    public ContactType(String name){
        this.name = name;
    }
}

在开始测试之前,我删除了之前在servlet中创建的所有已保存实例:

删除旧数据

Objectify ofy = ObjectifyService.ofy();
ObjectifyService.register(ContactType.class);

List<Key<ContactType>> contactTypes = ofy.load().type(ContactType.class).keys().list();
    ofy.delete().keys(contactTypes).now();

之后我将此实体保存为:

保存新数据

ContactType contactType1 = new ContactType("contactType1");
ContactType contactType2 = new ContactType("contactType2");
ofy.save().entity(contactType1 ).now();
ofy.save().entity(contactType2 ).now();

然后我检索刚刚保存的对象:

检索数据

 List<ContactType> list= ofy
                .load()
                .type(ContactType.class)
                .list();

获取2个预期对象。 但是当我注释掉删除并保存旧条目的行时,只想检索我上次保存的条目(以及我仍然可以在开发控制台中看到的条目),并使用intellij-idea检查返回的条目调试器,我只是在控制台中得到这个小错误消息并且没有堆栈跟踪。:

调试错误消息

Unable to evaluate the expression Method threw 'com.googlecode.objectify.LoadException' exception.

当我在intellij-idea调试器中将“view as”选项从“list”更改为“toString”时,我只获得以下信息:

enter image description here

所以我的问题是:

  1. 如何用objectify保存和检索数据?
  2. 如果出现问题,我怎么能看到详细的错误堆栈跟踪?

2 个答案:

答案 0 :(得分:0)

我终于解决了这个问题。当我试图获取返回列表的大小并在其周围放置一个try / catch时,我得到一条错误消息,表明我的实体没有没有参数的默认构造函数。

    try{
        List<ContactType> list= ofy
            .load()
            .type(ContactType.class)
            .list();  
        int size = list.size();
    }catch(LoadException e){
        String message = e.getMessage();
    }

添加以下construtor之后一切正常:

public ContactType(){
    name = "";
}

答案 1 :(得分:0)

在回答问题的第2部分时,Objectify抛出的堆栈跟踪包含了包装异常中所需的所有信息。无论捕获和记录异常,显然都会抑制异常消息。这不是GAE开发环境的默认行为,所以我不知道发生了什么。