내 특정 질문 (그 밖의 모든 내용은 문맥이므로 내 질문에 대한 대답을 알고있는 경우 무시할 수 있음) : JDO를 사용하여 개체가 일시적인지 여부를 어떻게 확인할 수 있습니까? 또는이 작업을 수행하는 간단한 방법은 어떻게 작성합니까?) 호기심이 아니면이 원하는 이유 understance하지 않는 사람들을위한개체가 지속성 관리자에 속하는지 여부를 확인하십시오.
컨텍스트 : 나는/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);
}
을이 일을하고 있습니다.