使用JDOQL中的'INTO'关键字和GAE

时间:2010-10-11 03:45:32

标签: java google-cloud-datastore jdoql

我有一个持久的课程,'会议'有一个'分钟'和'小时'字段等。我只需要这两个字段来填充我的ui中的下拉列表。 example I found告诉我,我可以创建一个简单的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());
    }

这是运行执行后调试模式中'时间'的样子: [0,0,0,0,0,0,0,10,21]

然后当我尝试将时间索引转换为MyTime对象时,我在for循环中得到了错误。 java.lang.ClassCastException:java.lang.Integer无法强制转换为com.emooney.meeting.beans.MyTime

如何在不必为每次会议带回整个“会议”对象的情况下获取此数据的任何想法?

这是MyTime bean:

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

    .. getters and setters..
}

}

1 个答案:

答案 0 :(得分:0)

GAE数据存储区不支持INTO。我认为你找到的例子是查询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());
}