2011-01-01 2 views
1

일부 필드가있는 데이터 클래스가 있습니다. 새 항목 (새 동기화 수행)을 추가하고 저장하면 항목을 덮어 쓰면 PK로 간주되는 URL이 하나 있습니다. 동일한 URL 인 경우 데이터베이스. 하지만 데이터베이스의 모든 객체에 대해 증가하는 "일반"Long ID가 필요합니다.이 태그는 PK로 태그를 지정하지 않으면 항상 null이됩니다. 어떻게이 증분을 가져올 수 있지만 내 PK로 열을 가질 수 있습니까?자동 증가 항목 i JDO, GAE

@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY) 
private Long _id; 
@Persistent 
private String _title; 
@PrimaryKey 
@Persistent 
private String _url; 

/빅토르

+0

URL이 키인 경우 왜 길어야합니까? –

+0

웹 페이지에서 개체를 요청할 때 전체 URL을 쿼리 문자열에 추가하지 않고 개체의 ID 만 추가하려고합니다. – Viktor

답변

3

이 작동 : 개체를 저장할 때 키와

@PrimaryKey 
private String _url; 

@Persistent(valueStrategy = IdGeneratorStrategy.SEQUENCE) 
private Long _id; 

채우기 _url 및 해제 _id을 둡니다. _id은 순차적 ID인지 아닌지 확실하지 않지만 자동으로 채워 져야합니다.

출처 : official Google AppEngine wiki.

+0

좋아, 그게 내가 "인코딩되지 않은 문자열"로 설정하려고 노력하지 않습니다 그리고 내 질문에 다음 인코딩 된 문자열이 인코딩 된 문자열을 원하십니까? 나는 검색을 시도했지만 이것에 대해서는 아무 것도 발견하지 못했습니다. 또한 base64로 문자열을 인코딩하려고 시도했지만 도움이되지 않았습니다. – Viktor

+0

나는 본다. 인코딩 된 문자열은'Key' 클래스의 문자열 표현으로,'KeyFactory'의'keyToString()'과'stringToKey()'메소드를 사용하여 문자열로 변환하거나 변환 할 수 있습니다. 그러나 당신이 원하는 것은 아닙니다. '@ PrimaryKey' 주석을 지정함으로써 사용자 정의 문자열 키를 사용할 수있는 것처럼 보입니다. 내 대답을 수정하고 사용해보십시오. – rodion

+0

사실 나는 또한 같은 문제에 부딪 혔습니다. 내가 제공 한 대답이 효과가있는 것 같습니다. 순차적으로 증가하는 ID를 얻기 위해서는'valueStrategy'를'SEQUENCE'로 설정하십시오. – rodion