При маппинге объекта через 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"),
                //тут надо получить паспорт         
        );
    }
}

Вопрос - как мне заполнить поле паспорта?

Вижу пока два варианта:

  1. В User хранить не ссылку на Passport, а int passport_id. И в случае, когда надо будет получить паспорт, писать:
Passport pass = passportDAO.getPassport(user.gerPassportID());

Получается ленивая загрузка.

  1. Либо же в 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")

        );
    }
}

Получается жадная загрузка.

Скажите, я правильно рассуждаю, что нужно так делать? Реальных проектов не видел, в уроках тоже.


Ответы (0 шт):