Hibernate/JPA之使用getSingleResult報異常NoResultException:No entity found for query


使用getSingleResult()方法時如果沒有結果(也就是返回null)時習慣思維是應該返回null,而getSingleResult()方法中有這么一條語句: @throws EntityNotFoundException if there is no result
也就是說,當他查詢不到結果時,將會拋出EntityNotFoundException異常,而不是返回null。
這就讓人非常惱火了,查不到結果任何時候的業務邏輯都不希望你拋一個異常出來,還要因為這個異常去做異常處理,麻煩。
那么解決的方法有兩個:
1.在Hibernate中放棄使用getSingleResult()改用uniqueResult();uniqueResult()方法在Hibernate5版本中已經被標記為過時的,但這並不影響使用,至於在將來版本中是否會移除就不清楚了。

return getSession()
            .createQuery(hql)
            .uniqueResult();

2.保險的做法是:仍然使用getResultList()方法,無論你是獲取一個還是多個結果,獲取一個結果的時候做一下處理:

List list = getSession().createQuery(hql).getResultList();
if(list.size() > 0)
    return list.get(0);
else
    return null;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM