JPA 直接返回query.getSingleResult()时返回null

nsf*_*n55 5 java orm hibernate jpa

我对 hibernate 和 jpa 有一个非常奇怪的问题。下面是两块代码:

public Object getObject(Date date) {
    try {

        Query query = entityManager
                .createQuery(
                        "select ob from Object ob where date= :date");
        query.setParameter("date", date);

        return (Object)query.getSingleResult();

    } catch (EmptyResultDataAccessException e) {
        logger.debug(String.format("No Result found - date[%s]",date));
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

...

public Object getObject(Date date) {
    try {

        Query query = entityManager
                .createQuery(
                        "select ob from Object ob where date= :date");
        query.setParameter("date", date);

        Object ret = (Object)query.getSingleResult();
        return ret;


    } catch (EmptyResultDataAccessException e) {
        logger.debug(String.format("No Result found - date[%s]",date));
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

即使给定日期匹配的有效记录,第一个也会每次生成 EmptyResultDataAccessException。第二个按预期返回结果。有没有人遇到过这个?是什么导致了这种行为?

请假设所有其他语法事物都存在(事务、初始化的实体管理器等),我唯一改变的是查询结果是直接在返回中检索还是首先分配给变量。

Boz*_*zho 0

那是不可能的。这两个变体是等效的。也许你缺少一些东西。

请注意,getSingleResult()如果结果超过 1 个,可能会引发异常。