2010-10-11 14 views
0

J'ai une classe persistante, 'Meeting' qui a un champ 'minute' et 'heure' parmi d'autres. J'ai seulement besoin de ces deux champs pour remplir une liste déroulante dans mon interface utilisateur. Le example I found m'indique que je peux créer un bean simple qui logerait juste ces deux champs mais j'obtiens une erreur disant qu'il ne peut pas convertir un entier en objet de MyTime. Ce n'est évidemment pas mapper les données au bean et malheureusement, c'est le seul exemple que je peux trouver.Utilisation du mot-clé 'INTO' dans JDOQL avec GAE

String query = "select hour as myHour, minute as myMinute into " + MyTime.class.getName() + " from " + Meeting.class.getName(); //+ 
    List<MyTime> times = (List<MyTime>)pm.newQuery(query).execute(); 

    for(int i=0; i<times.size(); i++) { 
     MyTime myTime = (MyTime)times.get(i); 
     System.out.println(myTime.getMyHour()); 
     System.out.println(myTime.getMyMinute()); 
    } 

Voici ce 'temps' ressemble en mode débogage après execute est exécuté: [0, 0, 0, 0, 0, 0, 8, 10, 21]

Et puis-je obtenir mon erreur dans la boucle for lorsque je tente de lancer et l'index des temps à un objet MyTime. java.lang.ClassCastException: java.lang.Integer ne peut pas être jeté à com.emooney.meeting.beans.MyTime

Toute idée comment je peux obtenir ces données sans avoir à porter l'ensemble de l'objet « réunion » de retour pour chaque réunion?

Voici le haricot MyTime:

public class MyTime { 
    public int myHour; 
    public int myMinute; 

    .. getters and setters.. 
} 

}

Répondre

0

EN est pas pris en charge sur GAE Datastore. Je pense que l'exemple que vous avez trouvé est pour interroger un rdbms.

Dans GAE/DS, vous pouvez soit extraire la clé, soit l'ensemble de l'objet; vous devez aller chercher l'objet entier.

List<Meeting> meetingTimes = (List<Meeting>) pm.newQuery(Meeting.class) 
    .execute(); 

for (Meeting meeting : meetingTimes) { 
    MyTime myTime = new MyTime(meeting.hour, meeting.hour); 
    System.out.println(myTime.getMyHour()); 
    System.out.println(myTime.getMyMinute()); 
}