我完全走错了路吗?这有用吗?
我正在尝试构建一个基于布尔值限制选择的查询
例如 findByIdAndFieldIsTrue(id)
这始终不返回任何值 . 如果我缩小这个并且只是做 findById(id)
我仍然没有得到任何看似奇怪的结果 . 我在方法名称中尝试了许多Id和字段的排列但没有效果 .
Entity {
@Id
String id
boolean field
}
interface EntityRepository BaseRepository, Repository {
findByIdAndFieldIsTrue(id)
}
我试过没有 BaseRepository
思考也许findOne方法干扰但没有运气 .
更新:
添加了答案中建议的 Logger 后,我可以得到查询
{"statement":"SELECT META(`mybucket`).id AS _ID, META(`mybucket`).cas AS _CAS, `mybucket`.* FROM `mybucket` WHERE (`id` = \"entity::9627ff50-531d-4191-a9dc-07b48ba77fe9\") AND `_class` = \"com.myrepo.repository.api.Entity\"","scan_consistency":"statement_plus"}
1 回答
编辑:N1QL强制你使用USE KEY构造来按id选择...这将更难集成,看起来变通方法是最简单的路径(见下文)
我认为这是对
@Id
字段的查询派生的忽视 . 在Couchbase中,该字段映射到文档正文中包含的文档's key and isn' t,因此N1QL查询需要将其考虑在内 .您可以为查询生成激活日志记录吗?有一个
AbstractN1qlBasedQuery.class
Logger 将在DEBUG
模式下记录生成的N1QL . 它将允许我们查看查询的外观,并确认必须对@Id字段采取特殊步骤...我知道如果反序列化很复杂,它就不会那么高效,但是解决方法可能是使用
findOne
然后检查字段 .