我有一个Document
实体。若要编辑文档,必须获取DocumentLock
。
请求API编辑文档如下所示。edit=true
允许使用'FOR‘从数据库中获取记录。
GET /api/document/123?edit=true
在后端,我们确实喜欢这个(当然不是简化的),
Document document = documentRepository.getOne(documentId) //<--- (1)
if(document == null){ //<--- (2) This is always false
//Throw exception
}
DocumentLock dl = DocumentLock.builder()
.lockedBy(user)
.lockedAt(NOW)
.document(document)
.build()
documentLockRepository.save(dl);
我们使用getOne()
是因为我们不需要从数据库中获取整个文档,我们只是创建一个与DocumentLock
对象的关系。
问题是,如何确保文档的实际存在?因为getOne()
总是返回代理,所以我看不到任何明显的方法来检查数据库中是否存在记录。
版本:
更新:删除其他问题。
发布于 2020-05-13 21:32:45
使用findById
或existsById
。是的,他们确实可以访问数据库。这就是重点,不是吗?
getOne
显式地适用于您已经知道实体存在并且只需要将id包装在类似于实体的东西中的用例。
发布于 2020-05-14 00:47:35
如果存储库返回值或其事务管理令人困惑,则应检查存储库代码和实体类设计,甚至检查用于查询或数据存储区设计的会话配置,因为这段代码片段中的所有内容看起来都很好。
https://stackoverflow.com/questions/61784285
复制