Google app engine 确定对象是否属于持久性管理器
我的具体问题(其他所有内容都只是上下文,如果您知道我问题的答案,可以忽略):我如何确定对象是瞬态的还是不使用JDO(或者如何编写一个简短的方法来实现这一点)? 对于那些好奇或不了解我为什么想要这个的人: 我在GAE/J上与JDO合作,目前正在实现应用引擎memcache api的使用。我遇到了一个问题,我从数据存储中缓存了一个实体的实例。在请求结束时,我的持久性管理器被关闭,并且——据我所知,缓存对象变得暂时(我可能错了),并挂起在缓存中 沿着这条路走下去,缓存的对象用于构建我的视图等,但是当我对对象进行更新并尝试持久化时;对象不会持久(这是理所当然的)。我通过在执行更新操作之前尝试重新获取缓存对象来解决这个问题。但这带来了另一个问题,因为现在当我更新一个没有缓存的对象时,它由我的持久性管理器管理,当我获取新对象时,我执行的任何更新操作都会被覆盖。基本上,我是这样做的Google app engine 确定对象是否属于持久性管理器,google-app-engine,memcached,jdo,transient,Google App Engine,Memcached,Jdo,Transient,我的具体问题(其他所有内容都只是上下文,如果您知道我问题的答案,可以忽略):我如何确定对象是瞬态的还是不使用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网站上找到