findOne(id))无法转换成相应的类型

return  repository.findOne(id);

应该寻找单个元素需要使用,findById(id);  

return repository.findById(id).orElse(null);

findOne(id))无法转换成相应的类型_第1张图片

 

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

findOne(id))无法转换成相应的类型_第2张图片

分析:

看了下jpa的依赖,因为SpringBoot的版本是2.0.0的,所以spring-data-jpa的版本也是2.0.x。 
拿2.0.5的源码和之前可行的1.11.9做了对比。 

findOne(id))无法转换成相应的类型_第3张图片

对比CrudRepository接口中: 

findOne(id))无法转换成相应的类型_第4张图片

各种方法名改变蒙蔽。。然而其实也一样,不过findOne方法的返回值也改了,变成了 Optional。才疏学浅不知道什么意思,只能点进去看一下了。

其中: 

findOne(id))无法转换成相应的类型_第5张图片

get()方法可以获取到值,但是直接这样写的话如果值不存在就要抛异常。所以要先做判断,值存在再get(),或者就是写在try-catch里。

findOne(id))无法转换成相应的类型_第6张图片

也可以用它的findById(id).orElse(null); 存在就会直接返回值,如果不存在会返回别的值,这里不存在返回的是null,(orElse里可以给默认值)。

解决:

如图吧 

findOne(id))无法转换成相应的类型_第7张图片

结果: 
存在时都一样,就是输出了该类目重写的toString方法里的数据。 
不存在时:

findOne(id))无法转换成相应的类型_第8张图片

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

你可能感兴趣的:(java)