使用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;