我有两个实体模型学生和出勤,每个出勤实体都有相关的学生家长。
出勤模式:
print_r($_POST);
学生模特:
@Entity
public class Attendance {
@Id
Long id;
@Index
Date date;
@Parent
@Index
@ApiResourceProperty(ignored = AnnotationBoolean.TRUE)
Ref<Student> studentRef;
public Long getId() {
return id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getWebsafeKey() {
return Key.create(studentRef.getKey(), Attendance.class, id).getString();
}
}
这是我如何将出勤实体插入数据存储区:
@Entity
public class Student {
@Id
Long id;
@Index
String name;
String student_id;
Long mobile_number;
String email;
@Index
@ApiResourceProperty(ignored = AnnotationBoolean.TRUE)
List<Ref<Shift>> shiftRef = new ArrayList<Ref<Shift>>();
public Long getId() {
return id;
}
public String getStudent_id() {
return student_id;
}
public void setStudent_id(String student_id) {
this.student_id = student_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getMobile_number() {
return mobile_number;
}
public void setMobile_number(Long mobile_number) {
this.mobile_number = mobile_number;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getWebsafeKey() {
return Key.create(Student.class, id).getString();
}
}
问题:
上述查询以数据格式存储数据存储中的日期: 2016-06-15(18:01:18.845)IST
但是当我在没有指定父母的情况下检索同一个实体时,它会给我一个日期:&#34; date&#34;:&#34; 2016-06-15T12:31:18.845Z&#34; 。请解释一下吗?
我能够存储与每个学生相对应的出勤率,并且能够检索学生的所有出勤率。 但如何在指定的日期或日期范围内检索学生的出勤率? 我试过打击查询: 查询query = ofy()。load()。type(Attendance.class).ancestor(studentKey).filter(&#34; date =&#34;,date);
但它给了我以下例外:
Key<Student> studentKey = Key.create(student_web_safe_key);
Date date = new Date();
date.setTime(System.currentTimeMillis());
attendance.setDate(date);
attendance.studentRef = Ref.create(studentKey);
ofy().save().entity(attendance).now();
答案 0 :(得分:1)
回答问题1:
Appengine使用UTC时间戳。因此,您的时间戳将从您的时区转换为UTC。但它仍然是相同的日期和时间。在输出期间,您需要考虑时间戳可能包含时区并相应地格式化/计算本地时间。
回答问题2:
您拥有错误所需的所有信息。如果你添加
<datastore-index kind="Attendance" ancestor="true" source="manual">
<property name="date" direction="asc"/>
</datastore-index>
到您的datastore-indexes.xml您的查询应该有效。
如果该文件尚不存在,请在{em> web.xml 和 appengine-web.xml 文件旁边的src/main/webapp/WEB-INF/datastore-indexes.xml
下创建该文件。
您可以找到example on this page。
至于原因:此错误的答案始终是:因为数据存储区需要此查询的复合索引。
答案 1 :(得分:1)
只是想根据评论添加到konqi的答案:
如果您在Android Studio中使用Cloud Endpoints,则必须先在导航面板中切换到“项目”视图,然后导航到“后端”文件夹,然后导航到src-&gt; main-&gt; webapp-&gt; WEB-INF然后在该文件夹中,您必须手动创建datastore-indexes.xml文件。这是你的看法:
<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes autoGenerate="true">
<!-- NOTE: Not necessary to create composite indexes here for single property indices b.c. they are build in.-->
<!-- If you do not specify direction, default is: direction="asc" -->
<datastore-index kind="Attendance" ancestor="true" source="manual">
<property name="date" direction="asc"/>
</datastore-index>
</datastore-indexes>