2012-02-04 5 views
0

데이터 저장소 인터페이스가있는 Google App Engine을 사용하고 있습니다.Google 데이터 스토어 중복 항목

엔티티를 업데이트하려고 할 때마다 완전히 새로운 엔티티가 생성됩니다. 이것은 동일한 엔티티를 저장하고 있다는 긍정적 인 의미에도 불구하고 동일한 키를 가지고 있음을 의미합니다. 내 관리 콘솔에서 확인 된 바와 같이 키가 모든 업데이트 동안 동일한 지 확신

Key key=KeyFactory.createKey("user",Long.parseLong(ID)); 
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
Entity entity=new Entity("user",key); 
entity.setProperty // ...whatever, updating the properties 
datastore.put(entity); //by putting an entity it's supposed to 
// either create a new one if non exists, or update an entity if it already exists 

:

내 코드입니다

id=3001 600643316 
id=3002 600643316 
id=3003 600643316 

같은과 개체의 무리 키 (600643316)가 생성됩니다.

답변

1

데이터 저장소는 앱이 숫자 ID가 아닌 String 키 이름을 가진 새로운 엔티티 만 만들도록 허용합니다. 숫자 ID는 시스템 할당 ID입니다. 키에 숫자 ID는 있지만 문자열 키 이름은없는 경우 데이터 스토어는이를 무시하고 시스템에서 할당 한 숫자 ID로 바꿉니다.

예에서 ID이 문자열 인 경우 Long.parseLong() 비트를 제거하거나 다시 문자열로 변환 할 수 있습니다. KeyFactory.createKey(String kind, String name)은 키 이름을 사용하여 Key을 만듭니다.

0

그래서 Dan이 정확하고 올바른 방법입니다. 앱에서 문자열을 사용해야하는 고유 한 키에서 키를 작성하려는 경우 Google 가이드에 설명되어 있습니다. "객체를 생성 할 때 엔티티가 식별자로 앱 할당 키 이름 문자열 또는 시스템 할당 숫자 ID를 사용해야하는지 여부를 지정합니다. 키 이름을 설정하려면이를 Entity 생성자의 두 번째 인수로 제공하십시오. Entity employee = new Entity("Employee","asalieri"); "올바른 것으로 보입니다. 두 번째 인수는 실제로 문자열입니다. - user1032663

+0

그 답을 허용으로 표시해야합니다. – DTing