findOne(id))無法轉換成相應的型別
阿新 • • 發佈:2019-01-06
return repository.findOne(id);
應該尋找單個元素需要使用,findById(id);
return repository.findById(id).orElse(null);
以前一直用的repository.findOne(ID id);
,這次用SpringBoot構建新專案後,並沒有找到這個findOne(ID id),只有另外的
分析:
看了下jpa的依賴,因為SpringBoot的版本是2.0.0的,所以spring-data-jpa的版本也是2.0.x。
拿2.0.5的原始碼和之前可行的1.11.9做了對比。
對比CrudRepository介面中:
各種方法名改變矇蔽。。然而其實也一樣,不過findOne方法的返回值也改了,變成了 Optional<T>
。才疏學淺不知道什麼意思,只能點進去看一下了。
其中:
get()方法可以獲取到值,但是直接這樣寫的話如果值不存在就要拋異常。所以要先做判斷,值存在再get(),或者就是寫在try-catch裡。
也可以用它的findById(id).orElse(null); 存在就會直接返回值,如果不存在會返回別的值,這裡不存在返回的是null,(orElse裡可以給預設值)。
解決:
如圖吧
結果:
存在時都一樣,就是輸出了該類目重寫的toString方法裡的資料。
不存在時:
所以就是我所能解決的有兩個方法就是:
1.使用回以前的版本1.5.9等等這些的,還是用findOne(ID id)的方法。
2.就是用findById(ID id),然後用.get()前要判斷是否是null,或者直接try-catch,或者用.orElse(null),推薦orElse()。