我有两个 bean (POJO) - 一个 Customer 和一个这样定义的地址类:
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
类的易用性,如果我添加或删除任何属性,我必须添加另一行。
有没有一种简单的方法来存储嵌套的 Address bean 而无需手动添加每个值?我必须如何定义数据库和/或 bean 才能做到这一点?