2012-04-02 1 views
0

다음과 같이 기본 기본 키가있는 기본 클래스를 정의합니다.GAE, JDO 긴/긴 형식으로 기본 키를 쿼리하는 방법

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true") 
@Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE) 
public class ModelBase implements Serializable { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long id; 

및 기타 pojo는 ModelBase를 확장합니다. 내가 JDOQL에 의해 쿼리가이 코드

public List<PersonalSetting> getByIds(Long... Ids) { 
    Query query = getQuery(); 
    query.setFilter("id ==:id"); 
    return (List<PersonalSetting>) query.execute(Ids); 
} 

같았다하지만 그냥 나에게 예외를 제공합니다.

java.lang.ClassCastException: [Ljava.lang.Long; cannot be cast to com.google.appengine.api.datastore.Key 

Key 클래스에 "Id"필드가 있지만 "id.id == : id"와 같이 액세스 할 수 없습니다. 누구나 해결 방법을 알려 줄 수 있습니까? 고마워요!

+0

기본 키를 String 유형으로 변경하려고 시도했습니다. 다시 발생합니다. 내 기본 필드는 String이지만 Key에 캐스트 할 수 없다고했습니다. 왜요? 어떻게 포함 된 메서드가 작동합니까, 나는이 문제에 열중 할 것입니다. – Jump2cn

답변

0

잘못된 JDOQL. 만약 당신이 컬렉션에서 어떤 요소를 찾고 싶다면 ": ids.contains (id)"

당신이 사용하고있는 Googles persistence plugin의 버전을 명시하고 나서 log/stacktrace

+0

답장을 보내 주셔서 감사합니다. 포함하는 방법을 시도해보십시오. 작동하지 않습니다. 동일한 예외 정보가 있습니다. 한 종류의 것 같습니다. 프로젝트의 gae SDK 버전은 1.6.4이며, 다시 1.6.3.1로 변경, 그것은 사소하지 않습니다. – Jump2cn

+0

은 persistence plugin의 버전이 아니며, "datanucleus-appengine"입니다. 플러그인에서 작동하는 것은 한 가지입니다. 나는 무엇을해야하는지에 대한 JDO 스펙을 간단하게 인용합니다. – DataNucleus

+0

1.0.10.final이고 datanucleus-core는 1.1.5입니다. 그들은 모두 두 개의 SDK 버전을 포함합니다. – Jump2cn