Spring Data JPA如何使用Kotlin空值而不是可选值

我正在用Spring Data JPA和Kotlin编写一个Spring Boot应用程序,我注意到在CrudRepository有以下方法:

 Optional<T> findById(ID id); 

不过,我正在使用Kotlin,它的处理空值的方式比Optional更加流畅。 有谁知道我会如何转换这种方法工作?

 fun findById(id: ID): T? 

当我扩展Repository本身,并创建一个回购签名时,我得到的错误:

 java.lang.ClassCastException: java.util.Optional cannot be cast to com.books.Book 

你必须使用JpaRepository接口:

创建一个存储库:

 interface FruitRepository : JpaRepository<Fruit, Long> { } 

使用:

 val fruit: Fruit? = fruitRepository.getOne(id) 

假设你想使用CrudRepositoryfindById函数,那么你可以创建你自己的扩展函数:

 fun <T> CrudRepository<T, Long>.findOne(id: Long): T? { val o = findById(id) return if(o.isPresent) o.get() else null } 

并像这样使用它:

 val fruit: Fruit? = fruitRepository.findOne(id)