我正在学习如何使用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”时,我只获得以下信息:
所以我的问题是:
答案 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开发环境的默认行为,所以我不知道发生了什么。