Обозначьте запрос среди встроенного списка Ref

63
5

В моем хранилище данных у меня есть почтовая организация, у которой есть отправитель, и у этого отправителя есть список мест. В принципе, это выглядит так:

@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>

Но результаты остаются безнадежно пустыми... Если у кого есть предложение, я буду рад. Благодаря !

спросил(а) 2021-01-25T19:23:36+03:00 5 месяцев назад
1
Решение
89

Чтобы запросить сообщение "sender.regions", необходимо вставить объект отправителя.

В хранилище данных нет SQL-подобных "join". Вы либо вставляете отправителя в сообщение, либо запрашиваете ключи Отправителя сначала по регионам, а затем запрашиваете сообщения с этими ключами отправителя.

Надеюсь, поможет.

ответил(а) 2021-01-25T19:23:36+03:00 5 месяцев назад
45

То, что я закончил, - это вставить Регион в Почту. Мне это нужно в нескольких других контекстах, поэтому при создании я копирую Регион отправителя в Почте, таким образом все мои проблемы закончились! :)

ответил(а) 2021-01-25T19:23:36+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема