У меня есть два компонента (POJO) - Клиент и класс адресов, определенный следующим образом:
public class Customer {
private String name = null;
private Address address = null;
public Customer() {
address = new Address();
}
public String getName() {
return name;
}
public void setName(name) {
this.name = name;
}
//additional setters/getters for various properties
}
public class Address {
private String street = null;
public String getStreet() {
return street;
}
public void setStreet(street) {
this.street = street;
}
//additional setters/getters for various properties
}
Я пытаюсь вставить это в базу данных, используя вот так:
public class CustomerDAO extends SimpleJdbcDaoSupport {
public int addOrganization(Customer customer) {
SimpleJdbcInsert insertCustomer = null;
BeanPropertySqlParameterSource params = null;
Number customerID = null;
insertTransaction = new SimpleJdbcInsert(getDataSource()).withTableName("customers")
.usingGeneratedKeyColumns("customerID");
params = new BeanPropertySqlParameterSource(customer);
customerID = insertTransaction.executeAndReturnKey(params);
return customerID.intValue();
}
}
Проблема в том, что я получаю Invalid argument value: java.io.NotSerializableException
, и он не вставляет Клиента.Я могу удалить адрес из базы данных, и он будет вставлять другие данные клиента.Или я могу сделать что-то вроде этого:
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("name", customer.getName());
params.addValue("street", customer.getAddress().getStreet());
, но это исключает простоту класса BeanPropertySqlParameterSource
, и если я добавляю или удаляю какие-либо свойства, мне нужно добавить еще одну строку.
Есть ли простой способ сохранить вложенный адресный компонент без необходимости вручную добавлять каждое значение?Как мне определить базу данных и / или компоненты, чтобы это произошло?