2012-04-02 5 views
0

Ich definiere eine Basisklasse, die einen langen Primärschlüssel haben, genau so.GAE, JDO Wie Abfrage Primärschlüssel von Long/Long Typ

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

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

und andere pojo erweitert die ModelBase. Als ich Abfrage von JDOQL wie dieser Code

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

aber es mir nur eine Ausnahme geben.

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

fand ich die Key-Klasse "Id" -Feld haben, aber ich kann nicht darauf zugreifen wie "id.id ==: id". Kann mir jemand sagen, wie ich es beheben kann? Vielen Dank!

+0

Wenn ich versuche, den Primärschlüssel in String-Typ zu ändern. Es ist wieder passiert. Mein primäres Feld ist String, aber es kann nicht in Key umgewandelt werden. Warum? Wie die Methode contains funktioniert, ich bin verrückt nach diesem Problem. – Jump2cn

Antwort

0

Ungültiger JDOQL. Wenn Sie ein Element in einer Sammlung finden möchten, tun Sie ": ids.kontains (id)"

Offensichtlich würde es Sinn geben, welche Version von Googles Persistenz-Plugin Sie verwenden, und dann das Protokoll/Stacktrace

+0

Vielen Dank für die Antwort.Ich versuche nur die enthält Methode, es funktioniert nicht.Ich habe die gleiche Ausnahme info.Es sieht aus wie sie in einer Art sind.Die Version von Gae SDK in meinem Projekt ist 1.6.4, und ich war Zurück zu 1.6.3.1, es ist nicht anders. – Jump2cn

+0

das ist nicht die Version des Persistenz-Plugins, auch bekannt als "Datanucleus-Appengine". Was in ihrem Plugin funktioniert, ist eine Sache, ich zitiere einfach die JDO-Spezifikation von dem, was funktionieren sollte: – DataNucleus

+0

Es ist 1.0.10.final und der Datanucleus-Core ist 1.1.5. Sie alle enthalten durch diese zwei sdk Version – Jump2cn

Verwandte Themen