java - JpaRepository 是否有补丁方法来更新特定对象
问题描述
我想知道 JpaRepository 是否有一种方法可以仅更新对象的特定值而不从数据库中获取整个对象。这是我的代码来解释一下:
控制器
@PatchMapping("/{labelKeyUuid}")
@ApiOperation("Update the current version of an existing label key")
fun updateCurrentVersion(@PathVariable labelKeyUuid: UUID,
@RequestBody labelValueUuidRequest: LabelValueUuidRequest) {
val labelValue = labelValueService.findByUuid(labelValueUuidRequest.uuid)
?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "Label value with uuid '\'${labelValueUuidRequest.uuid}\'' not found")
return labelKeyService.updateCurrentVersion(labelKeyUuid, labelValue)
}
服务
fun findByUuid(uuid: UUID) : LabelValueEntity? {
return labelValueRepository.findByIdOrNull(uuid)
}
fun updateCurrentVersion(labelKeyUuid: UUID, labelValue: LabelValueEntity) {
labelKeyRepository.save(labelValue, labelKeyUuid)
}
存储库
@Repository
interface LabelKeyRepository : JpaRepository<LabelKeyEntity, UUID>
JpaRepository 有 save(entity) 方法。我知道我可以通过从数据库中获取对象并使用新对象设置 labelValue 并将其保存到数据库来解决它。有没有更快的方法来做到这一点?
解决方案
如果您不需要访问对象的当前状态,则可以使用entityManager.getReference()
方法。与entityManager.find()
此方法相反,不会调用 select 语句。
entityManager.getReference()
JPARepository
作为getOne()
方法公开。
请注意,这两种方法返回的对象都有自动脏检查,您应该在同一个事务中调用find()
orgetReference()
和后续修改,并且更改将自动持久化。仅用于save()
存储库以保留新实体或附加分离的实体。
另请阅读: 何时将 EntityManager.find() 与 EntityManager.getReference() 与 JPA 一起使用
推荐阅读
- javascript - 反应 onChange 文本输入正在将光标移动到输入字段中的文本末尾
- django - 在一个模板中添加来自不同相关模型的 {{ variable }} 的最简单方法
- mysql - 在 SublimeText 3 中配置 MySQL
- html - 使用 CSS 将表格单元格移回上一个单元格
- sql - MS Access SQL 查询表并删除重复项
- google-apps-script - ScriptApp.getService().getUrl() 不返回实际的脚本 URL
- react-native - 将导航传递给 BottomNavigation
- string - Apply edit to strings
- git - Collaboration development mixing public and private repositories
- python - python Statsmodels SARIMAX KeyError: 'The `start` argument could not be matched to a location related to the index of the data.'