2

我有一个 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}

有什么我做错了吗?

4

2 回答 2

2

内联查询的语法是 plain 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'”。

于 2016-03-14T09:54:27.283 回答
0

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

于 2016-03-14T07:50:29.030 回答