spring - 是否有一种较少冗余的方式来加载/保存实体?
问题描述
目前,我们的项目中有很多这种模式。加载实体并在之后保存它是一项非常常见的任务。Kotlin 中是否有更简洁、更少冗余的方式?
userRepository.findByIdOrNull(1L)?.let {
userRepository.save(it.apply {
firstName = "Jon"
lastName = "Doe"
})
} ?: throw NoSuchElementException("User not found")
解决方案
据我所知,没有官方方法可以使它更简洁,但是您可以JpaRepository
像这样创建一个扩展函数:
inline fun <reified T : Any, ID : Serializable> JpaRepository<T, ID>.update(id: ID, modify: T.() -> Unit) = findByIdOrNull(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
而不是抛出异常。这取决于您的用例。
如果您想知道为什么我会立即提出并回答这个问题,请看这里。
推荐阅读
- r - 将 Col2:ncol(df) 转换为百分比格式
- mysql - SQL如何获得每天的平均值
- laravel - 如何在 Backpack for Laravel 中启用过滤器?
- python - 通过不仅删除第一个和最后一个字符来确定一个字符串是否是 k 回文
- pine-script - Point & Figure 不适用于所有图表
- php - 索引匹配时将嵌套数组设置为变量
- java - 长通量有时不完整
- amazon-web-services - 修改 S3 存储桶中的数据是否会更新 FSx-Lustre 卷中的数据?
- python - 当你的模型不学习时你会怎么做?重量永远不变
- python - 如何从 Mapbox 获取 CSS