Я пытаюсь написать приложение для механизма приложений Google, используя Objectify, и у меня возникли проблемы. Я новичок в хранилищах данных noSQL, поэтому, вероятно, это концептуальная проблема.
У меня есть сущность, называемая сообщением, и у каждого сообщения есть от пользователя — пользователь, создавший сообщение.
@Entity
public class Message {
@Index private Key<User> fromUserKey;
@IgnoreSave private User fromUser;
Досадно, что мне нужно иметь в сообщении и поле пользователя, и поле ключа. JSON нуждается в объекте пользователя, чтобы заполнить ответ полезными полями, а механизму приложения Google нужен ключ, чтобы иметь возможность хранить ссылку на пользователя. Аннотация @IgnoreSave используется, чтобы запретить Objectify запрашивать у движка приложения Google попытку сохранить объект пользователя (что не удастся).
При получении сообщений ключ от пользователя заполняется, а объект от пользователя — нет. Вот как выглядит код DAO для моей операции «getMessages»:
public static List<Message> getSentMessages(long userId) {
List<Message> result;
result= ofy().load().type(Message.class).filter("from", Key.create(User.class, userId)).limit(1000).list();
return result;
}
Но объект fromUser не заполняется в каждом сообщении, а только fromUserKey. Как мне получить фактический объект пользователя, заполненный в ответе? Мне нужен доступ к таким полям, как имя, фамилия и т. д., а не только к идентификатору пользователя. Я мог бы получить от пользователя из БД, прокрутить результаты, а затем вызвать setFromUSer для каждого сообщения, но это уродливо. И это также вызывает ConcurrentModificationException...
Я уверен, что я делаю что-то неправильно здесь, но я не могу понять, что.