Реляционные данные не отображаются в Ebean

Задний план

Я использую Play Framework (Java) для хранения данных. Play Framework использует ***** для преобразования классов в данные, которые могут быть сохранены в базе данных aa.

вопрос

В настоящее время у меня возникают проблемы с получением реляционных данных. У меня есть User и модель UserEmail. User может иметь несколько UserEmail.

Код модели пользователя Код модели электронной почты пользователя

Когда я пытаюсь найти User, данные User UserEmail правильно, однако UserEmail не является.

Код ввода Когда я специально добавляю fetch("emails") в код извлечения

User.find.fetch("emails").where().eq("userId", testUserId).findUnique();

Он швы вроде как по крайней мере получает электронные письма. Однако, когда я пытаюсь показать их через

return ok(Json.toJson(retrievedTestUser));

Я получаю эту ошибку

Вопрос

Можно ли каким-либо образом заставить Play Framework/***** автоматически получать электронные письма без добавления fetch("emails") к каждому запросу? Может быть, аннотация?

Как устранить ошибку выше? Я понимаю, почему он брошен, но как я могу это исправить? Есть ли способ получить только один уровень глубины?

1 ответ

Я нашел решение проблемы выше. Каждый объект должен иметь идентификатор. User класс имеет поле, аннотированное с помощью @Id но UserEmail его нет.

После добавления @Id аннотации над полем email UserEmail класса UserEmail пользователь правильно загружается, а его список адресов электронной почты не пуст.

@Id
public String email;

Еще одна вещь, которую я заметил в вашем коде: Когда вы создаете двунаправленное отношение, вы должны использовать атрибут mappedBy с одной стороны, чтобы указать, что это два конца одного отношения, а не два отдельных отношения. Таким образом, должно быть:

@OneToMany(mappedBy="user", cascade = CascadeType.ALL)
@Constraints.Required
public List<useremail> emails;
</useremail>

licensed under cc by-sa 3.0 with attribution.