Использование Необязательного для getSingleResult - PullRequest
0 голосов
/ 26 марта 2019

Здравствуйте, у меня есть вопрос о Факультативном.Необязательный должен использоваться, когда есть возможность, тогда нуль может быть возвращен.Я хотел использовать его, чтобы найти изображение по номеру товара.Так в DAO:

 @Override
    public Optional findImage(int itemId) {
        Session currentSession = entityManager.unwrap(Session.class);
        return currentSession
                .createQuery("select from Image as i where it.itemId=:itemId")
                .setParameter("itemId", itemId)
                .setMaxResults(1)
                .getResultList()
                .stream()
                .findFirst();
    }

В обслуживании:

@Override
public Image findImage(int itemId) {
    LOGGER.info("Getting image by item id: {}", itemId);
    Optional opt = this.imageDAO.findImage(itemId);
    return opt.orElseThrow(() -> new ImageNotFound("The image for item with id: " + itemId + " was not found"));
}

Но я не могу получить значение или выдать конкретную ошибку.

Может кто-нибудь объяснить, как я долженприблизиться к получению одного результата через Optional?

Спасибо !!

1 Ответ

1 голос
/ 26 марта 2019

РЕДАКТИРОВАТЬ

Как упоминалось @Slaw, мой предыдущий ответ был неверным, и я предположил, что код, размещенный в вопросе, не имеет проблемы компиляции.В любом случае, вот обновленный ответ, основанный на комментарии @ Slaw.

По сути, код не будет компилироваться, потому что он не может определить тип возвращаемого Optional.Так что просто параметризуйте Optional

@Override
public Image findImage(int itemId) {
    LOGGER.info("Getting image by item id: {}", itemId);
    Optional<Image> opt = this.imageDAO.findImage(itemId); <== parameterize Optional
    return opt.orElseThrow(() -> new ImageNotFound("The image for item with id: " + itemId + " was not found"));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...