JPA踩坑記錄

坑1:JPA 根據主鍵獲取對象時,如果查詢不到記錄報錯。

findOne:return 如果沒有找到,則使用給定id或{@literal null}的實體。不利於我麼判空放棄使用。

getOne:return 如果沒有找到會報javax.persistence.EntityNotFoundException,不利於異常處理放棄使用。

findById:return 如果沒有找到會,會報java.util.NoSuchElementException: No value present,此時應該

當通過jap通過id查詢時,使用 findById(id).get(),當id不存在當,也就是數據庫沒有對應當id數據時,就回報上面當異常

後來查看源碼,發現:

public T get() {
     if (value == null) {
           throw new NoSuchElementException("No value present");
     }
     return value;
 }

也就是說當查不到值的時候,jap統一處理爲拋異常,所以每次取之前都要判斷有沒有數據,後來發現了這個

 public boolean isPresent() {
        return value != null;
 }

於是代碼就這樣寫

Optional<T> optionalT = orderDetailRepository.findById(id);
return optionalT.isPresent() ? optionalT.get(): null;

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章