我有一个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 回答
内联查询的语法是plain
N1QL
,它使用$
而不是?
.HOWEVER 请注意,带有手工制作查询的
@Query
并不总是最好的主意,因为它有一个注意事项 .为了正确地解组实体,查询还应该提取一些元数据:文档的ID(成为实体的
@Id
)和CAS(成为实体的@Version
)......此外,由于在Couchbase中,任何类型的数据都可以混合在同一个后备存储桶中,因此查询应始终过滤正确的
_class
属性 .因此,最好使用实用程序SpEL重写您的查询,以便将所有这些考虑在内:
selectEntity
将被足够的“SELECT default.*, META(default).ID AS id, META(default).CAS AS cas FROM default
”取代 . 同样,filter
将被适当的where子句“_class = 'com.packege.here.GsJsonStore'
”取代 .替换'?'用'$'解决了这个问题 .