私は 2 つの Bean (POJO) を持っています。次のように定義された Customer クラスと Address クラスです。
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 をどのように定義する必要がありますか?