2011-04-05 3 views
7

Google App Engine에서 JDO 객체를 식별하려면 Key 유형을 사용합니다. 그것은 잘 작동하지만 내가 URL을 통해 전달해야 할 때 그것은 일종의 가져옵니다. 예를 들어App Engine 식별자입니다. 키 대 ID

: http://mysite.com/user/aghtaWx1LWFwcHIZCxIGTXlVc2VyGAMMCxIHTXlJbWFnZRgHDA

내 관리자 뷰어에서 내 실체를 볼 때 데이터 스토어는 또한 증분 숫자 값을 것으로 보인다 내 엔티티 객체, 대한 "ID"를 설정하는 것을 나는 볼 수 있습니다 Key 문자열에 비해 꽤 짧습니다. 이 객체를 사용하여 객체의 정보를 가져올 수 있습니까? 어떻게해야합니까? 나는 열쇠 대신에 id와 함께 getObjectbyId()을 사용해 보았는데 ... 작동하지 않는다.

아이디어가 있으십니까?

+0

id를 사용하려고 시도했던 코드를 게시 할 수 있습니까? – Yasser

답변

9

예, 당신이 할 수 있습니다. ID를 가져와야 할 때마다 다음 메서드 호출을 사용할 수 있습니다. user : user.getKey().getId()이라는 엔티티 클래스 User의 객체를 사용한다고 가정합니다. ID의 유형은 long입니다. 자세한 내용은 JavaDoc (com.google.appengine.api.datastore.Key)을 참조하십시오.

ID가 있으면 언제든지 Key을 작성한 다음 개체를 쿼리하면됩니다.

Key key = KeyFactory.createKey("User", id); 
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
User user = datastore.get(key); 
+0

'id'는 실제로 문자열이며'ID/Name' 열 아래의 데이터 저장소에 표시되는 값입니다. 코드를 사용하면 작동하지 않습니다. 나는 다음과 같은 것을 얻는다.'종류의 엔티티를 가져올 수 없다. User 키 ("50")를 가진 사용자. –

+1

디코딩 된 엔티티 키가 보인다. 그렇게하지 않았다면 컨트롤러 코드에서 ID 매개 변수 String (예 : Servlet)을 구문 분석해야합니다. 이런 식으로 Servlet에서 작동합니다 :'Long.parseLong (httpServletRequest.getParameter ("id")'. 데이터 저장소 뷰어에 ID가 50 인 엔티티가 있습니까? –

+0

죄송합니다. 엔터티 종류의 이름) 키를 만들 때 위의 코드가 수정되었습니다. –

2
당신은 기본 키로 엔티티의 ID를 정의해야합니다

:

private class MyObject implements Serializable{ 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long id; 
} 

그런 다음 당신이 시도 할 수 있습니다 :

long id = someObject.getId(); 

MyObject mo = getPM().getObjectById(MyObject.class, id); 
+0

내 질문에 명시된 바와 같이 "Long"대신 "Key"유형을 사용합니다. –