2010-02-01 4 views
3

업데이트 : 추가 테스트를 통해이 문제가 내 엔티티 그룹의 모든 하위 엔티티에 영향을 미치는 것 같습니다. 이러한 모든 다른 인스턴스에 대한 내 루트 부모는 User kind입니다. 이는 내 자신의 생성이지 사용자 내장 유형이 아닙니다. 자식 Kind의 생성자에서 parent = user를 제거한 후 get_by_key_name은 예상대로 작동합니다. 그러나 가능한 경우 엔티티 그룹 기능을 정의 된 키와 함께 사용할 수 있기를 바랍니다.Google Appengine : Odd get_by_key_name 동작

- 안녕하세요, 내 GAE 프로젝트에서보다 빠른 쿼리를 위해 정의 된 키 이름을 사용하려고합니다.

그러나 키를 가져올 수없는 이상한 문제가 발생했습니다.

for l in Logins.all().fetch(): 
    print Login.get_by_key_name(l.key().name()) 

일부 노트 :이 코드는 작동하지 않는다. 나는 단지 SDK에서 테스트 한

  • L.KEY() 이름은()에 나열된 키 이름의 문자열을 반환 엔티티와 데이터 저장소를 살펴볼 때 복사하여 데이터 스토리 밖으로 붙여 넣을 수 있습니다 및 get_by_key_name() 인수로 사용하고 그 중 하나가 작동하지 않습니다.

  • 로그인 종류의 키 이름은 모두 앞에 "l"(소문자 "L") 접두사가 붙고 다른 모든 것은 소문자이며 밑줄이나 대시가 포함될 수 있지만 500 바이트 미만일 수 있습니다.

  • 다른 작품은이 작품과 같습니다.

  • 의 핵심은 로그인 종류의 2 곳의 보간하고, 내가 잘 인스턴스에 대한
  • 은 "부모가"사용자 클래스입니다 일반 .filter() 메소드를 사용하여 객체를 가져올 수 있습니다. (이것이 내가 가져야하는 방식에 어떤 영향을 미친다면 언급 할 것)

이렇게 물어볼 필요가있는 분명한 이유가 있습니까? SDK를 사용하여 키 이름 검색과 관련된 알려진 문제가 있습니까?

+0

나는 이것이 알려진 문제라고 생각한다. 그러나 SDK만으로도 문제가되는지, 아니면 제품에 영향을 미치는지 여부는 알기가 어렵습니다. http://code.google.com/p/googleappengine/issues/detail?id=2228#makechanges –

+0

보조 노트로 get_by_key_name (key_name, parent)에 부모 인수를 추가하면 잘 작동합니다.이게 어떻게 작동해야합니까? –

답변

3

두 번째 설명이 정확합니다. AFAIK. 부모/자식 관계는 파일 시스템의 디렉토리 또는 폴더 구조와 유사합니다. 귀하의 열쇠는 (개념적으로) /parents/[parent_keyname]/logins/[login_keyname]입니다. 따라서 /logins/[login_keyname]을 가져 오면 엔티티를 얻을 수 없습니다. (; 부모 관계의 모든 시간을 이야기해야한다`get_by_key_name()에는 모든 LoginParent의 아이들해야합니다 규칙은 없습니다.)

내 자신의 코드에서

, 나는 Key.from_path() 내 키에게 자신을 구축 만난다 . 클래스 메서드를 사용합니다. Login.key_for_name(some_parent, some_name) 그리고 또한 Login.get_by_key_name_for_parent(some_parent, some_name) (글쎄, 내 메서드 이름은 짧지 만 명확하게 해준다.) 그런 다음 적어도 부모/자식 관계가 잘못된 키를 생성 할 수 없다.

+0

답장을 보내 주셔서 감사합니다. 어제 마침내 발견했습니다. 왜 당신은'Child.get_by_key_name()'에 부모가 필요한지에 대한 논리.그러나 부모님의 열쇠는 어떤 방식 으로든 자녀의 열쇠의 일부이므로 부모님이 자녀 키를 작성해야한다는 것을 알 필요가 있습니다. 지금까지 이것은 자식 엔티티 콘텐츠에 대한 퍼머 링크를 제외하고는 훌륭하게 작동합니다. 거기에 성능이 필요할 수도 있습니다. –