Использование ключевого слова INTO в JDOQL с GAE - PullRequest
0 голосов
/ 11 октября 2010

У меня есть постоянный класс «Собрание», в котором есть поля «минуты» и «часы». Мне нужны только эти два поля, чтобы заполнить раскрывающийся список в моем пользовательском интерфейсе. Пример , который я обнаружил , говорит мне, что я могу создать простой bean-компонент, который будет содержать только эти два поля, но я получаю сообщение об ошибке, говорящее, что он не может преобразовать Integer в объект MyTime. Очевидно, это не отображение данных в bean-компонент, и, к сожалению, это единственный пример, который я могу найти.

    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());
    }

Вот как выглядит «times» в режиме отладки после запуска execute: [0, 0, 0, 0, 0, 0, 8, 10, 21]

И тогда я получаю ошибку в цикле for, когда пытаюсь привести и индексировать время к объекту MyTime. java.lang.ClassCastException: java.lang.Integer не может быть приведен к com.emooney.meeting.beans.MyTime

Есть идеи, как мне получить эти данные, не возвращая весь объект 'Meeting' для каждой встречи?

Вот бин MyTime:

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

    .. getters and setters..
}

}

1 Ответ

0 голосов
/ 08 января 2011

INTO не поддерживается в хранилище данных GAE.Я думаю, что вы нашли пример для запроса к rdbms.

В GAE / DS вы можете выбрать либо просто ключ, либо весь объект;вам нужно получить весь объект.

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());
}
...