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

Задний план

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

У меня возникли проблемы с созданием связей между БД One To Many. Я пытаюсь создать отношения между моделью User моделью UserEmail. Если у каждого User может быть много UserEmails. Код модели пользователя Код модели электронной почты пользователя

Проблема

Когда я создаю User а затем добавляю UserEmail, он не создает швы для сохранения UserEmail в базе данных. Я пробовал делать так много.

  • Добавив в List<useremail> emails</useremail> а затем сохраните User (Code)
    • Результат: новый User хранится в базе данных с правильной информацией, однако никакой новый UserEmail не сохраняется в базе данных
  • Создав static create метод static create в UserEmail (Code)
    • Результат: в базе данных не было сохранено UserEmail
  • Добавив в List<useremail> emails</useremail> а затем сохраните UserEmail и User (Code)
    • Результат: новый User хранится в базе данных с правильной информацией, однако никакой новый UserEmail не сохраняется в базе данных

Вопрос

В Play Framework (Java), как вы создаете и храните реляционные данные? Есть ли какой-то шаг, который мне не хватает? Должен ли я добавить еще одну Annotation к models чтобы она работала?

Обновить

После некоторого дополнительного тестирования похоже, что сохранение объекта User с помощью нового UserEmail сохранит его в базе данных. Однако, когда я получаю пользователя

User retrievedTestUser = User.find.where().eq("userId", testUserId).findUnique();

Он не извлекает UserEmails

2 ответа

Проблема была @Id в классе @Id отсутствовала аннотация UserEmail. Добавление ниже кода решает проблему:

@Id
public String email;


Добавить информацию об обратном поле:

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

Подробности в документации

licensed under cc by-sa 3.0 with attribution.