@ScRsa
Delphi/Oracle Изучаю JAVA

Spring Data как правильно настроить/сохранить entity?

@Entity
public class ReportPeriod {
    ...
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "reportPeriod")
    private Collection<Document> documents;
}

@Entity
public class Document {
    ...
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "report_period_id", referencedColumnName = "id", nullable = false)
    private ReportPeriod reportPeriod;
}

...
ReportPeriod rp = new ReportPeriod();
rp.setDatePeriod('01.01.2001');
reportPeriodRepository.save(rp);
...


При создании нового периода получаю:
rp.Id = 123
rp.datePeriod = '01.01.2001'
rp.documents = null

Вопрос. Почему после сохранения периода получаю что documents == null? По идее же должна вернуться пустая коллекция?

Если сделать поиск другого, ранее сохраненного, периода: reportPeriodRepository.findOne(345). То rp.getDocuments() возвращает коллекцию а не null.
  • Вопрос задан
  • 705 просмотров
Решения вопроса 1
Пустая коллекция будет, если объект загружается из базы. Если объект был создан в коде и сохранен в базу, то Hibernate не будет ничего инициализировать.

Я обычно использую следующий код для getter-ов внутренних коллекций (подсмотрел у JAXB):
public Collection<Document> getDocuments() {
    if (documents == null) {
        documents = new ArrayList<>();
    }
    return documents;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
jaxtr
@jaxtr
JavaEE/Spring-разработчик
rp = reportPeriodRepository.save(rp);

И будет тебе счастье. Но лучше создавать пустую коллекцию в get-методе при необходимости. А вообще, лучше отказаться от обращения к @OneToMany и @ManyToMany коллекциям.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект