我有一个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}
我有什么问题吗?
答案 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;解决了这个问题。