В моем хранилище данных у меня есть почтовая организация, у которой есть отправитель, и у этого отправителя есть список мест. В принципе, это выглядит так:
@Entity
@Cache
@Unindex
@Searchable
public class Post {
@Index
@Load(WithSender.class)
@NonNull @Getter @Setter
protected Ref<User> sender;
@Index
@Getter
protected long creation;
}
@Entity
@Cache
@Unindex
public class User {
@Index
@NotNull
@Email
@NonNull
@Getter
@Setter
private String email;
@Size(max = 50)
@Getter
@Setter
private String firstName;
@Size(max = 50)
@Getter
@Setter
private String lastName;
@Index
@Setter
@Getter
protected List<Key<Region>> regions;
}
Я хочу сделать запрос на все сообщения, которые были отправлены пользователем, принадлежащим региону, который находится в списке регионов этого пользователя, и по порядку создания.
В принципе, я пытался это сделать:
query = query.filter("sender.regions", "key").order("-creation");
Когда я выполнил запрос в первый раз, AppEngine попросил создать этот индекс:
<datastore-index kind="Post" ancestor="false" source="manual">
<property name="sender.regions" direction="asc"/>
<property name="creation" direction="desc"/>
</datastore-index>
Но результаты остаются безнадежно пустыми... Если у кого есть предложение, я буду рад. Благодаря !
Чтобы запросить сообщение "sender.regions", необходимо вставить объект отправителя.
В хранилище данных нет SQL-подобных "join". Вы либо вставляете отправителя в сообщение, либо запрашиваете ключи Отправителя сначала по регионам, а затем запрашиваете сообщения с этими ключами отправителя.
Надеюсь, поможет.
То, что я закончил, - это вставить Регион в Почту. Мне это нужно в нескольких других контекстах, поэтому при создании я копирую Регион отправителя в Почте, таким образом все мои проблемы закончились! :)