У меня есть объект Client, который «владеет» несколькими объектами Address. Итак, мой класс Клиент определяет набор для хранения объектов адреса следующим образом:Hibernate Master Detail Cascade Insert
@OneToMany(fetch=FetchType.LAZY, mappedBy="client", cascade={CascadeType.ALL})
и мой адрес класс определяет переменную экземпляра клиента, как это:
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ClientId", nullable=false)
У меня есть форма, которая позволяет пользователю чтобы одновременно вводить данные о клиенте и данные адреса, с сохранением формы, приведет к тому, что Клиент будет сохранен в базе данных, а Cascade приведет к тому, что адрес также будет сохранен.
Я могу заставить это работать, но только если я вручную установил свойство Client в объекте Address в контроллере непосредственно перед тем, как сохранить объект клиента.
public String clientSave(@ModelAttribute("form") AddClientForm form, ModelMap model) {
logger.debug("clientsave");
Client client = form.getClient();
HashSet<Address> addresses = new HashSet<Address>(form.getAddresses());
// TODO - Should I have to do this?
for (Address a : addresses){
a.setClient(client);
}
client.setAddresses(addresses);
clientService.saveClient(client);
Должен ли я это сделать, или я что-то упускаю?
Отлично - спасибо большое – DaveH