首页 文章

Spring Data Couchbase findById始终返回null

提问于
浏览
1

我完全走错了路吗?这有用吗?

我正在尝试构建一个基于布尔值限制选择的查询

例如 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 回答

  • 2

    编辑:N1QL强制你使用USE KEY构造来按id选择...这将更难集成,看起来变通方法是最简单的路径(见下文)

    我认为这是对 @Id 字段的查询派生的忽视 . 在Couchbase中,该字段映射到文档正文中包含的文档's key and isn' t,因此N1QL查询需要将其考虑在内 .

    您可以为查询生成激活日志记录吗?有一个 AbstractN1qlBasedQuery.class Logger 将在 DEBUG 模式下记录生成的N1QL . 它将允许我们查看查询的外观,并确认必须对@Id字段采取特殊步骤...

    我知道如果反序列化很复杂,它就不会那么高效,但是解决方法可能是使用 findOne 然后检查字段 .

相关问题