При маппинге объекта через RowMapper, как правильно получать ссылки на другие объекты?
Пытаюсь разобраться с JDBC Template
Дано - класс User и класс Passport.
В классе User есть поле с типом Passport
Делаю запрос к БД, получаю resultSet, содержащий данные user'a, а также id'шник на passport
Соответственно, хочу resultSet преобразовать в объект User. Использую класс-маппер
public class UserMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet resultSet, int rowNum) throws SQLException {
return new User(resultSet.getInt("id"),
resultSet.getString("name"),
resultSet.getString("surname"),
//тут надо получить паспорт
);
}
}
Вопрос - как мне заполнить поле паспорта?
Вижу пока два варианта:
- В
Userхранить не ссылку наPassport, аint passport_id. И в случае, когда надо будет получить паспорт, писать:
Passport pass = passportDAO.getPassport(user.gerPassportID());
Получается ленивая загрузка.
- Либо же в
UserMapperиспользоватьPassportDAOи сразу его подтягивать
public class UserMapper implements RowMapper<User> {
private final PassportDAO passportDAO;
public UserMapper(PassportDAO passportDAO) {
this.passportDAO = passportDAO;
}
@Override
public User mapRow(ResultSet resultSet, int rowNum) throws SQLException {
return new User(resultSet.getInt("id"),
resultSet.getString("name"),
resultSet.getString("surname"),
passportDAO.getPassport(resultSet.getInt("passport_id")
);
}
}
Получается жадная загрузка.
Скажите, я правильно рассуждаю, что нужно так делать? Реальных проектов не видел, в уроках тоже.