Objectify:无法计算表达式方法抛出 'com.googlecode.objectify.LoadException' 异常

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

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

联系人类型

@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" 时,我只得到以下信息:

所以我的问题是:

  1. 如何使用 objectify 保存和检索数据?
  2. 出现问题时如何查看详细的错误堆栈跟踪?

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

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

添加以下构造函数后一切正常:

public ContactType(){
    name = "";
}

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