앱 엔진에서 먼저 가져 오지 않고 Key로 엔티티를 삭제하십시오 (JDO 사용)
-
18-09-2019 - |
문제
데이터 스토어에서 먼저 가져올 필요없이 엔티티를 삭제하는 방법이 있습니까? 엔티티의 키나 ID가 이미 있다고 가정합니다. 나는 같은 것을 생각하고있다 deleteObjectById
그것은 아날로그 일 것입니다 getObjectById
~에 PersistenceManager
.
내가 생각할 수있는 가장 가까운 것은 사용하는 것입니다 Query.deletePersistentAll()
(본 것처럼 여기) 및 키에 의존하는 쿼리를 지정하지만, 엔티티를 삭제하기 전에 엔티티를 가져올 것인지 알 수 없습니다.
감사해요
편집 : 낮은 레벨 API와 Python API를 사용 하여이 작업을 수행하는 방법을 알고 있습니다. JDO 층 내에 수행 할 방법이 있는지 궁금합니다.
해결책
Datanucleus는 내 질문에 대답했습니다 Google 그룹:
설마. 문제는 객체가 관계를 가질 수 있다는 것입니다. 따라서 캐스케이드 작업을 유발할 수 있으므로 일반적으로 먼저 메모리에로드되어야합니다. 메모리에로드 할 필요가없는 유일한 상황은 삭제 될 객체의 클래스에 관계가없는 경우였습니다.
낮은 레벨 API로 들어가서 물체를 폭파하면 관련 객체에 영향을 미치지 않을 수도 있습니다.
다른 팁
나는 JDO에 대해 잘 모르겠지만 파이썬의 경우 작은 해킹으로 가능합니다. 동일한 키로 새 인스턴스를 "작성"한 다음 삭제해야합니다. 데이터베이스에 한 번만 누르게됩니다.
instance = Model(key=key_to_delete, required_property='dummy')
instance.delete()
사용하는 것은 어떻습니까 저수준 API?
제 생각에는 DataService.delete(Key)
필요한 것을 정확히 할 것입니다.
Key로서 Long을 사용하는 경우 Keymaker를 사용하여 먼저 키를 만듭니다.
Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");