我正在使用Spring Data JPA和Kotlin编写Spring Boot应用程序,并且我注意到其中CrudRepository存在以下方法:
CrudRepository
Optional<T> findById(ID id);
不过,我使用的是Kotlin,它处理空值的方式比更加流畅Optional。有谁知道我如何将这种方法转换为这样的工作?
Optional
fun findById(id: ID): T?
当我扩展Repository自身并使用该签名创建存储库时,出现错误:
Repository
java.lang.ClassCastException: java.util.Optional cannot be cast to com.books.Book
从Spring Data Lovelace SR4 / Spring Boot 2.1.2开始,CrudRepository.findByIdOrNull(id: ID): T? = findById(id).orElse(null)Kotlin扩展现在提供了一种开箱即用的方法来检索Spring Data中的可为空的实体。
CrudRepository.findByIdOrNull(id: ID): T? = findById(id).orElse(null)
如果出于性能原因,您希望避免使用Optional<T>包装器,请注意,还可以使用findFooById(id: ID): T?函数创建自定义接口。查询执行是特定于存储的,但大多数都使用内部可为空的值,这将避免Optional<T>包装程序的开销。请注意,对于大多数用例而言,此开销可以忽略不计,因此建议使用内置扩展。
Optional<T>
findFooById(id: ID): T?
有关更多详细信息,请参见DATACMNS-1346。