问题描述
我使用的是 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);
}