我想適應兩個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方法將拋出一個異常,說明。這是因爲它們之間的行映射器的循環依賴性。我知道我做了這個錯誤的方式,我想知道如何正確地重寫行映射器。非常感謝。