首页 文章

无法执行Spring-data Couchbase查询

提问于
浏览
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}

有什么我做错了吗?

2 回答

  • 2

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

    HOWEVER 请注意,带有手工制作查询的 @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' ”取代 .

  • 0

    替换'?'用'$'解决了这个问题 .

相关问题