无法执行 Spring-data Couchbase 查询

Posted

技术标签:

【中文标题】无法执行 Spring-data Couchbase 查询【英文标题】:Unable to execute Spring-data Couchbase query 【发布时间】:2016-06-29 03:55:47 【问题描述】:

我有一个 spring-data couchbase 存储库。我正在尝试通过 @Query 注释使用 n1ql 查询来查询数据库。我实现的一个基本存储库如下所示:

public interface CouchBaseRepository extends PagingAndSortingRepository<GsJsonStore, Long> 
@Query("SELECT * FROM default WHERE ?0 = ?1")
public Page<GsJsonStore> matchJson(String term, String value, Pageable pageable);�
�

当我尝试使用这种方法进行查询时,我得到了错误:

Unable to execute the query due to the following errors:
"msg":"syntax error - at 0","code":3000

是不是我做错了什么?

【问题讨论】:

【参考方案1】:

内联查询的语法是普通的N1QL,它使用$而不是?

但是请注意,带有手工查询的 @Query 并不总是最好的主意,因为它有一些需要注意的地方。

为了正确解组实体,查询还应该提取一些元数据:文档的 ID(变为实体的@Id)和 CAS(变为实体的@Version)...

此外,由于在 Couchbase 中任何类型的数据都可以混合在同一个支持存储桶中,因此查询应始终过滤正确的 _class 属性。

因此,最好使用实用程序 SpEL 重写您的查询,以便将所有这些考虑在内:

@Query("#n1ql.selectEntity WHERE $0 = $1 AND #n1ql.filter")

selectEntity 将替换为适当的“SELECT default.*, META(default).ID AS id, META(default).CAS AS cas FROM default”。 同样,filter 将替换为适当的 where 子句“_class = 'com.packege.here.GsJsonStore'”。

【讨论】:

【参考方案2】:

替换“?”用 '$' 解决了这个问题。

【讨论】:

以上是关于无法执行 Spring-data Couchbase 查询的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Boot,无法使用spring-data JPA在MySql中保存unicode字符串

Spring-Boot,无法使用 spring-data JPA 在 MySql 中保存 unicode 字符串

Spring-data MongoDB地理查询

无法使用 groovy 脚本在 couchbase 上创建主索引

在 spring-data 项目中使用 @Version

Spring-data:阻止更新