1. 程式人生 > >findOne(id))無法轉換成相應的型別

findOne(id))無法轉換成相應的型別

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()。