私は、多くのAddressオブジェクトを「所有している」Clientオブジェクトを持っています。だから、私のクライアントクラスは、次のようにアドレスオブジェクトを保持するためのセットを定義しています。Hibernateマスター詳細カスケード挿入
@OneToMany(fetch=FetchType.LAZY, mappedBy="client", cascade={CascadeType.ALL})
と私のアドレスクラスは、このようなクライアントのインスタンス変数を定義しています
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ClientId", nullable=false)
私は、ユーザーを許可するフォームを持っていますクライアントの詳細とアドレスの詳細を同時に入力します。フォームを保存するとクライアントがデータベースに保存され、カスケードによってアドレスも保存されます。
クライアントオブジェクトを保存する直前に、コントローラのAddressオブジェクトにClientプロパティを手動で設定した場合にのみ、これが動作するようになります。
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