坑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;