私は、1つのクライアントが多くのアドレスエンティティに関連付けることができるマスターと詳細の関係からなるデータモデルを持っています。私は、Hibernate Toolsを使用してドメインオブジェクトを生成しました。次の(単純化された)クラスを取得します。Spring MVCマスター詳細の問題
Client.java
@Entity
@Table(name="Client")
public class Client implements java.io.Serializable {
private Set<Address> addresses = new HashSet<Address>(0);
@OneToMany(fetch=FetchType.LAZY, mappedBy="client")
public Set<Address> getAddresses() {
return this.addresses;
}
public void setAddresses(Set<Address> addresses) {
this.addresses = addresses;
}
}
Address.java
@Entity
@Table(name="Address")
public class Address implements java.io.Serializable {
private AddressId id;
private AddressType addressType;
private Client client;
private String addressLine1;
@AttributeOverrides({
@AttributeOverride(name="clientId", [email protected](name="ClientId", nullable=false)),
@AttributeOverride(name="addressTypeId", [email protected](name="AddressTypeId", nullable=false)) })
public AddressId getId() {
return this.id;
}
public void setId(AddressId id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ClientId", nullable=false, insertable=false, updatable=false)
public Client getClient() {
return this.client;
}
public void setClient(Client client) {
this.client = client;
}
}
私は、ユーザーがクライアントレコードとアドレスのレコードを追加できるようにするためのフォームを書きたいんですそれと同時に、私のコントローラでは、Clientインスタンスを作成してModelMapに配置します。私はjsp内のClientオブジェクトのフィールドを喜んで参照できますが、Addressオブジェクトのフィールドを参照する方法はわかりません。
org.springframework.beans.InvalidPropertyException以下の例外で
<form:input type="text" path="addresses[0].addressLine1" />
結果のようなコード:無効なプロパティ 'アドレス[0]' Beanクラスの[com.greenock.saltcam.hibernate.domain.Client] :プロパティのアドレスを取得しようとする不正な試みは例外を投げた。入れ子になった例外はorg.springframework.beans.InvalidPropertyExceptionです:Beanクラス[com.greenock.saltcam.hibernate.domain.Client]のプロパティ 'addresses [0]'が無効です:サイズ0のセットからインデックス0の要素を取得できません。プロパティパス「アドレス[0]」
これは、(セットが空です)不合理として私に当たらないが、それは私が私のコントローラで空のアドレスオブジェクトを作成する必要があることを意味し、およびjspに渡す前にそれをClientオブジェクトにプッシュしますか?ユーザーが任意の数のアドレスを追加できるようにするにはどうすればよいですか?
優秀な回答 - ありがとうございます。春は素晴らしいですが、それはそうです_巨大なものです。 – DaveH