我试图找出我看到的一个问题。我注意到,当我通过添加一个新字段来更改实体对象定义时,有时我不再可以从数据存储中已经存在的先前记录中获取结果。例如,在下面的这个例子中,我可以在数据存储中看到实体,但是我得到了这个异常:
严重:没有查询结果:SELECT FROM com.alero.services.model.MyEntity myEntity WHERE myEntity.key = :key
我将 JPA 与 GAE 数据存储一起使用。
我似乎能够纠正问题并再次开始获得结果的唯一方法是删除 appengine 生成的目录,然后重新创建实体。它是否以某种方式被缓存,如果是这种情况,我应该做些什么来让数据存储知道它需要删除缓存?
String queryString = "select from " + MyEntity.class.getName()
+ " myentity where myentity.key = :key";
Key keySub = KeyFactory.createKey("MyEntity", myEntityId);
Query query = em.createQuery(queryString);
query.setParameter("key", KeyFactory.keyToString(keySub));
try {
MyEntity myEntity = (MyEntity) query.getSingleResult();
em.close();
return myEntity;
} catch (Exception e) {
log.severe(e.getMessage());
em.close();
}