Spring Data JPA Как использовать ноль Kotlin вместо необязательного

Я пишу приложение Spring Boot с Spring Data JPA и Kotlin, и я заметил, что в 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) 

Предположим, вы все CrudRepository хотите использовать CrudRepository с функцией findById , тогда вы можете создать свою собственную функцию расширения следующим образом:

 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) 
Intereting Posts
Создание карты со значениями, содержащими дженерики Невозможно преобразовать в коллекцию в котлин Нежелательные выборы в RecyclerView ClassNotFoundException при последующих сборках после преобразования MainActivity в Kotlin Как использовать код, который опирается на ThreadLocal с сопрограммами Kotlin Как использовать класс Kotlin в классе java? Как позволить котлинскому блоку вернуть пустоту? Kotlin: Как изменить значение в паре? Смарт-бросок в BootsrapButton невозможен, потому что endtrip является изменчивым свойством, которое к этому времени изменилось Kotlin весело возвращается преждевременно Метод hasSystemFeature возвращает неправильное значение при проверке поддержки BluetoothLE TornadoFX Как создать MDI со списком моделей дочерних окон? Есть ли удобный способ создания Parcelable классов данных в Android с Kotlin? Интерфейс Pass в качестве параметра в Kotlin Миссия по срокам не выполняет миссии