【问题标题】:Spring Data Couchbase findAll(Iterable)Spring Data Couchbase findAll(Iterable)
【发布时间】:2016-04-13 15:38:36
【问题描述】:

我正在使用 Spring Data findAll(Iterable) 方法从 couchbase 中检索信息。但是我看到空响应。

我定义了下面列出的存储库:

public interface CustomerRepository extends CrudRepository<Customer, String> {

}

我通过传递有效的 json 来获取数据

Iterable<Customer> custIter=customerRepository.findAll(customerList);

视图定义如下:

function (doc, meta) {  
   if(doc._class=="com.customer.model.types.Customer" ){
      emit(meta.id, doc); 
   } 
}

编辑:

如果我在 findAll 调用之前的循环中进行 findOne 调用,findAll 调用会返回数据。

【问题讨论】:

  • 您在返回的可迭代对象中看到空值还是单个空引用?你在传递一个键列表吗?那是哪个版本的 SDC?
  • 嗨西蒙,我只看到一个空引用。我正在传递这样的键列表 - [“string1”,“string2”]。这是版本:org.springframework.data:spring-data-couchbase:1.3.2.RELEASE。当我使用 findAll 时,这将返回一个空响应。但是当我使用 findOne 后跟 findAll 时, findAll 正在返回响应。运行一次 findOne 后,即使我注释了 findOne ,后续的 findAll 调用也是返回结果。
  • 你好。只是一些快速的 cmets: 1. 发出“doc”不是一个好主意 - 它实际上在索引中创建了一个重复的 doc(原始的)。相反,只需在获得视图结果后获取()文档。 2. 此外,meta.id 已经作为视图数据的一部分发出,因此重新发出它没有任何意义。你可以发出(null,null)。 3. finally:您可以在 couchbase UI 上调试您的视图。请记住,如果您尚未发布视图,您可能会看到部分结果。

标签: java spring spring-boot spring-data couchbase


【解决方案1】:

findAll 基于视图,我认为这可能是由于视图索引延迟...您是否恰好在执行此代码之前重新创建数据? IIRC 此版本没有使用特定的过时标准,因此它应默认为 UPDATE_AFTER,这将在第一次查询后重新同步索引(这对应于您在第一个 findAll 和后续查询中看到的...)

【讨论】:

  • 谢谢西蒙。即使我在创建 Dara 5 分钟后尝试获取数据也会发生这种情况,并且我认为这可能是由于视图索引延迟。这个问题有解决办法吗?
  • 我不太确定,特别是如果数据已经存在 5 分钟...桶中是否有很多数据?
  • 不,是我们的低层环境。我不认为有很多数据。但是我可以通过等待更长的时间来重试,然后我会重试测试。
  • findaAll() 会发生这种情况吗(简单的无参数版本)
  • 不,我会尝试更新。感谢您的指导!!
【解决方案2】:

有点晚了,但由于@FuzzyAmi 的评论,我遇到了一个问题。不要发出(null, null),因为findAll(Iterable&lt;ID&gt;) 方法依赖于KEYS 而不是ID 来查找文档。我有一个发出(null, null)findAll(Iterable&lt;ID&gt;) 的视图总是返回一个空列表。我认为这应该记录在 spring-data-couchbase javadoc 中。

发送(meta.id, null) 以便能够使用spring-data-couchbase findAll(Iterable&lt;ID&gt;)

@simon-baslé:我认为应该更新文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多