我想适应两个RowMappers的两个对象,它们之间有@OneToMany关系。Spring RowMapper for OneToMany?
假设,我有两种方法:
public Account findAccount(long id) {
SQL = "SELECT * FROM accounts WHERE id = ?";
Account account = template.queryForObject(SQL, new Object[] { id }, MAP_ACCOUNT);
return account;
}
public Card findCard(String number) {
SQL = "SELECT * FROM cards WHERE number = ?";
Card card = template.queryForObject(SQL, new Object[] { number }, MAP_CARD);
return card;
}
和两个排映射器: “太多的连接”
private final RowMapper<Card> MAP_CARD = new RowMapper<Card>() {
public Card mapRow(ResultSet rs, int rowNum) throws SQLException {
Account account = findAccount(rs.getLong("account_id"));
Card card = new DefaultCard(rs.getString("number"), account);
return card;
}
};
private final RowMapper<Account> MAP_ACCOUNT = new RowMapper<Account>() {
public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
SQL = "SELECT * FROM cards where account_id = " + rs.getLong("id");
List<Card> cards = template.query(SQL, MAP_CARD);
Account account = new DefaultAccount(rs.getLong("id"), rs.getString("username"), cards);
return account;
}
};
运行findAccount或findCard方法将抛出一个异常,说明。这是因为它们之间的行映射器的循环依赖性。我知道我做了这个错误的方式,我想知道如何正确地重写行映射器。非常感谢。