В сущности фактуре, у меня есть набор DetailInvoice с каскадом ВСЕХParentID не установлен в дочерней сущность автоматически каскад
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "invoice")
public Set<DetailInvoice> getDetailInvoices() {
return detailInvoices;
}
В сущности DetailInvoice:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "invoice_id")
public Invoice getInvoice() {
return invoice;
}
Saving :
Invoice invoice = new Invoice();
DetailInvoice detailInvoice = new DetailInvoice();
invoice.getDetailInvoices().add(detailInvoice);
detailInvoice.setInvoice(invoice); // (1) Should we need this row?
session.save(invoice);
Если мы не имеем ряд (1), то detailInvoice будет InvoiceID является недействительным в базе данных. Почему Hibernate не устанавливаетInvoiceId to detailInvoice автоматически основывается на сопоставлении аннотаций?
Большое спасибо
Спасибо за ваш ответ, но я думаю, что этот документ не является ответом на вопрос. Это просто упоминание об _inverse_, которое является объявлением _mapBy_. Вопрос относится к каскаду и указывает родительский список для списка дочерних элементов. – phanhongphucit
Я имел в виду эту часть «Во-первых, имейте в виду, что Hibernate не влияет на обычную семантику Java. Как мы создали связь между Person и Event в однонаправленном примере? Вы добавляете экземпляр события в коллекцию событий ссылки на экземпляр Person. Если вы хотите сделать эту ссылку двунаправленной, вы должны сделать то же самое с другой стороны, добавив ссылку Person в коллекцию в Event. Этот процесс «установки ссылки на обоих стороны "абсолютно необходимы с двунаправленными ссылками". Похоже, вы упомянули раздел 1.2.5, см. Раздел 1.2.6 –