可以直接拖到最后看解决方法。

问题:

以前一直用的repository.findOne(ID id);,这次用SpringBoot构建新项目后,并没有找到这个findOne(ID id),只有另外的
继承JpaRepository后,找不到findOne()方法

分析:

看了下jpa的依赖,因为SpringBoot的版本是2.0.0的,所以spring-data-jpa的版本也是2.0.x。
拿2.0.5的源码和之前可行的1.11.9做了对比。
继承JpaRepository后,找不到findOne()方法
对比CrudRepository接口中:
继承JpaRepository后,找不到findOne()方法
各种方法名改变蒙蔽。。然而其实也一样,不过findOne方法的返回值也改了,变成了 Optional<T>。才疏学浅不知道什么意思,只能点进去看一下了。

其中:
继承JpaRepository后,找不到findOne()方法
get()方法可以获取到值,但是直接这样写的话如果值不存在就要抛异常。所以要先做判断,值存在再get(),或者就是写在try-catch里。
继承JpaRepository后,找不到findOne()方法
也可以用它的findById(id).orElse(null); 存在就会直接返回值,如果不存在会返回别的值,这里不存在返回的是null,(orElse里可以给默认值)。

解决:

如图吧
继承JpaRepository后,找不到findOne()方法
结果:
存在时都一样,就是输出了该类目重写的toString方法里的数据。
不存在时:
继承JpaRepository后,找不到findOne()方法

所以就是我所能解决的有两个方法就是:
1.使用回以前的版本1.5.9等等这些的,还是用findOne(ID id)的方法。
2.就是用findById(ID id),然后用.get()前要判断是否是null,或者直接try-catch,或者用.orElse(null),推荐orElse()

有什么偏差的地方欢迎交流。

相关文章: