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" 时,我只得到以下信息:
所以我的问题是:
- 如何使用 objectify 保存和检索数据?
- 出现问题时如何查看详细的错误堆栈跟踪?
我终于解决了这个问题。当我尝试获取返回列表的大小时并在其周围放置 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 开发环境的默认行为,所以我不知道发生了什么。
我正在学习如何使用 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" 时,我只得到以下信息:
所以我的问题是:
- 如何使用 objectify 保存和检索数据?
- 出现问题时如何查看详细的错误堆栈跟踪?
我终于解决了这个问题。当我尝试获取返回列表的大小时并在其周围放置 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 开发环境的默认行为,所以我不知道发生了什么。