У меня есть модель данных, которая состоит из отношения между основными деталями, где один Клиент может быть связан со многими объектами Address. Я создал объекты домена с помощью 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;
}
}
Я хотел написать форму, которая позволяет пользователю добавить запись клиента и запись адреса в то же время, поэтому в моем контроллере я создаю экземпляр клиента и помещаю его в ModelMap. Я могу с радостью обратиться к полям объекта Client в моем jsp, но понятия не имею, как обращаться к полям в объекте Address.
код как <form:input type="text" path="addresses[0].addressLine1" />
приводит к следующему исключению
org.springframework.beans.InvalidPropertyException: инвалидное свойство 'адрес [0] класс боба [com.greenock.saltcam.hibernate.domain.Client] : Незаконная попытка получить адрес собственности «исключена»; Вложенное исключение - org.springframework.beans.InvalidPropertyException: Недопустимые адреса свойств [0] 'класса bean [com.greenock.saltcam.hibernate.domain.Client]: не удается получить элемент с индексом 0 из набора размера 0, доступ к которому осуществляется с помощью «адрес [0]» свойство Path
Это не кажется мне неразумным (множество является пустого), но значит ли это, что мне нужно создать пустой объект адреса в моем контроллере и вставить его в объект Client перед передачей его в jsp? Что делать, если я хочу разрешить пользователю добавлять любое количество адресов?
Отличный ответ - спасибо большое. Весна велика - но это так-то ужасно - есть так много, чтобы справиться с – DaveH