Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 确定对象是否属于持久性管理器_Google App Engine_Memcached_Jdo_Transient - Fatal编程技术网

Google app engine 确定对象是否属于持久性管理器

Google app engine 确定对象是否属于持久性管理器,google-app-engine,memcached,jdo,transient,Google App Engine,Memcached,Jdo,Transient,我的具体问题(其他所有内容都只是上下文,如果您知道我问题的答案,可以忽略):我如何确定对象是瞬态的还是不使用JDO(或者如何编写一个简短的方法来实现这一点)? 对于那些好奇或不了解我为什么想要这个的人: 我在GAE/J上与JDO合作,目前正在实现应用引擎memcache api的使用。我遇到了一个问题,我从数据存储中缓存了一个实体的实例。在请求结束时,我的持久性管理器被关闭,并且——据我所知,缓存对象变得暂时(我可能错了),并挂起在缓存中 沿着这条路走下去,缓存的对象用于构建我的视图等,但是当我

我的具体问题(其他所有内容都只是上下文,如果您知道我问题的答案,可以忽略):我如何确定对象是瞬态的还是不使用JDO(或者如何编写一个简短的方法来实现这一点)?

对于那些好奇或不了解我为什么想要这个的人:

我在GAE/J上与JDO合作,目前正在实现应用引擎memcache api的使用。我遇到了一个问题,我从数据存储中缓存了一个实体的实例。在请求结束时,我的持久性管理器被关闭,并且——据我所知,缓存对象变得暂时(我可能错了),并挂起在缓存中

沿着这条路走下去,缓存的对象用于构建我的视图等,但是当我对对象进行更新并尝试持久化时;对象不会持久(这是理所当然的)。我通过在执行更新操作之前尝试重新获取缓存对象来解决这个问题。但这带来了另一个问题,因为现在当我更新一个没有缓存的对象时,它由我的持久性管理器管理,当我获取新对象时,我执行的任何更新操作都会被覆盖。基本上,我是这样做的

// valueWithChangesToUpdate is an object that could be from 
// memcache or could be fresh from pm, don't know for sure
// going into the method
public <T extends SomeKindOfEntity> void update(CustomQueryClass q, T valueWithChangesToUpdate) {

  // If valueWithChangesToUpdate is not from memcache/not transient then
  // any changes made are overridden when the following statement executes

  T freshObject = q.runQuery();


  // What I would like to do to avoid problem I'm having...
  // T freshObject = null;
  // if(valueWithChangesToUpdate.isTransient()) {
  //   freshObject = q.runQuery();
  // }

  // End goal...
  freshObject.applyUpdates(valueWithChangesToUpdate);
  PMF.getCurrentPM().makepersistent(freshObject);
}
//valueWithChangesToUpdate是一个可以从
//memcache或可能是pm的新版本,不确定
//研究方法
公共作废更新(CustomQueryClass q,T值随更改更新){
//如果valueWithChangesToUpdate不是来自memcache/非瞬态,则
//执行以下语句时,将覆盖所做的任何更改
T freshObject=q.runQuery();
//我想做什么来避免我遇到的问题。。。
//T freshObject=null;
//if(值WithChangesToUpdate.isTransient()){
//freshObject=q.runQuery();
// }
//最终目标。。。
freshObject.ApplyUpdate(值随更改而更新);
getCurrentPM().makepersistent(freshObject);
}
如果有其他方法,我应该尝试这样做,或者如果我认为这是错误的,请随时指出它

JDOHelper.getObjectState(obj);
明确地告诉您对象的状态。及

JDOHelper.getPersistenceManager(obj);
告诉您PM管理对象(如果有)。文档可以在JDO规范或ApacheJDO网站上找到

明确地告诉您对象的状态。及

JDOHelper.getPersistenceManager(obj);
告诉您PM管理对象(如果有)。文档可以在JDO规范或ApacheJDO网站上找到