对getSingleResult

时间:2019-03-25 21:09:43

标签: java spring hibernate optional

您好,我有一个关于可选的问题。 当有可能返回null时,应使用可选。 我想用它来按项目ID查找图像。 所以在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 个答案:

答案 0 :(得分:1)

编辑

正如@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"));
}