如何使用带有@Query 的 spring-data-couchbase 从文档中返回布尔值

问题描述

我使用的是 spring-data-couchbase 4.1.1。我想在我的存储库方法添加一个方法,如下所示

public interface DomainRepository extends CouchbaseRepository<Domain,String> {

@Query(("SELECT isActive from #{#n1ql.bucket}  "
      + "WHERE Meta().id = " + "\"#{#id}\" "))
Boolean isActive(@Param("id") String id);

}

但它抛出 ClassCastException for Domain to Boolean 我相信这是可以接受的。

还有其他简单的方法吗?我相信旧版本的 couchbaseTemplate 中有一个 findByN1QlProjection,但在这个版本中找不到它。但我宁愿不直接使用couchbasetemplate 或couchbase sdk 的子文档api。

一个类似的旧问题How to fetch a field from document using n1ql with spring-data-couchbase

解决方法

一个提议的解决方案是定义一个 DTO 及其专门用于需要的领域的存储库。

class IsActiveDTO {

private isActive;

// constructor,getters,and setters
}

并定义它的存储库

public interface IsActiveDTORepository extends CouchbaseRepository<IsActiveDTO,String> {

@Query(("SELECT isActive from #{#n1ql.bucket}  "
      + "WHERE META().id = " + "\"#{#id}\" "))
IsActiveDTO isActive(@Param("id") String id);

}