无法执行Spring-data Couchbase查询

时间:2016-03-14 07:44:17

标签: spring-data couchbase spring-data-couchbase

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

我有什么问题吗?

2 个答案:

答案 0 :(得分:2)

内联查询的语法是纯N1QL,使用$代替?

请注意@Query带有手工制作的查询并不总是最好的主意,因为它有一点需要注意。

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

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

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

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

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

答案 1 :(得分:0)

更换&#39;?&#39;与&#39; $&#39;解决了这个问题。