Intereting Posts
Веб-просмотр Android с kotlin. не работает тип ввода = файл Не удается запустить проект kotlin на Android Studio 3.0 Расширение Kotlin Android не может разрешить «текст», Как скомпилировать модуль домена Kotlin с клиентским модулем с Gradle? Тип параметра проверки Kotlin Поведение System.identityHashCode () для примитивов Ошибка Android Kotlin: «Тип возврата – это« единица », которая не является подтипом переопределенного« Студия Android 3: устаревшая Kotlin Runtime Условный оператор Котлина Есть ли способ загружать библиотеки времени выполнения, кроме того, что они помещаются в src / main / jniLibs? Как получить доступ к атрибутам / методам в стандартном параметре класса Как позволить классу данных реализовать интерфейс / расширяет свойства суперкласса в Котлине? Прослушивание сообщений и написание команд по наблюдаемому потоку Проблема с kotlin для Android Не удалось добавить mysql-коннектор в build.gradle для проекта kotlin?

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 

Solutions Collecting From Web of "Spring Data JPA Как использовать ноль Kotlin вместо необязательного"

Вы должны использовать интерфейс 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)