Существует ли менее избыточный способ загрузки / сохранения объекта? - PullRequest
0 голосов
/ 24 января 2019

В настоящее время мы часто используем этот шаблон в нашем проекте.Загрузка сущности и ее сохранение впоследствии - обычная задача.Есть ли более короткий и менее избыточный способ в Kotlin?

userRepository.findOne(1L)?.let {
    userRepository.save(it.apply {
        firstName = "Jon"
        lastName = "Doe"
    })
} ?: throw NoSuchElementException("User not found")

Если вам интересно, откуда findOne возвращается null или откуда исходит сущность вместо Optional, пожалуйста, посмотрите здесь .

1 Ответ

0 голосов
/ 24 января 2019

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

inline fun <reified T : Any, ID: Serializable> JpaRepository<T, ID>.update(id: ID, modify: T.() -> Unit) = findOne(id)?.let {
    modify(it)
    saveAndFlush(it)
} ?: throw NoSuchElementException("There is no ${T::class.simpleName} with id $id!")

, и использовать ее следующим образом:

userRepository.update(1L) {
    firstName = "Jon"
    lastName = "Doe"
}

Это сделает сайт вызовов действительно чистым и лаконичным.

update может, конечно, вернуть null вместо того, чтобы выдавать исключение.Это зависит от вашего варианта использования.


Если вам интересно, почему я сразу спросил и ответил на этот вопрос, посмотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...