首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >春季编写自定义n1ql查询

春季编写自定义n1ql查询
EN

Stack Overflow用户
提问于 2016-03-14 11:00:13
回答 1查看 2.1K关注 0票数 1

我正在尝试使用N1QL查询查询一个spring数据库库。我有两个疑问:

我使用@Query注释来生成查询,代码如下所示:

代码语言:javascript
运行
复制
@Query("#{#n1ql.selectEntity} WHERE $0 = $1 AND #{#n1ql.filter}")
    public Page<GsJsonStore> matchJson(String term, String value, Pageable pageable);
    //Query
    Page<GsJsonStore> p = repo.matchJson("_object.details.status", "ready", pg);

此查询不返回任何结果。但是,当我在cbq中运行相同的查询(如下所示)时,我得到了所需的结果:

代码语言:javascript
运行
复制
select * from default where _object.details.status = 'ready';

如何查看Couchbase存储库生成的查询字符串?我用的是弹簧靴。对这个用例使用@Query注释正确吗?

此外,如何在n1QL模板上执行CouchbaseOperations查询?我知道有一个findByN1QL方法,但是我没有找到任何关于它的好文档。谁能解释一下怎么用这个吗?

EN

回答 1

Stack Overflow用户

发布于 2016-03-14 13:29:07

查询看起来没问题。您确实使用Spring存储库持久化了您的GsJsonStore实体,对吗?

为了记录框架生成和执行的所有查询(包括内联查询,比如在您的示例中),您可以在logback.xml配置中像这样配置记录器:

代码语言:javascript
运行
复制
<logger name="org.springframework.data.couchbase.repository.query" level="debug"/>

您将看到执行的查询与在cbq中运行的查询不一样,因为至少没有使用WHERE子句。

CouchbaseOperations中,有两种相对于N1QL查询的方法:

  1. findByN1QL:这需要查询的特定结构,以确保选择了用于纠正Spring数据注释实体反序列化所需的所有数据(这是#n1ql.selectEntity#n1ql.filter SpEL的目的)。
  2. findByN1QLProjection是更自由的形式.如果Jackson可以将提供的查询的结果反序列化到请求的类,那么它就会。因此,SELECT子句在此方法中的隐式限制要小得多。

要同时使用这两种方法,您必须从SDK传入一个N1qlQuery对象。这样的查询可以使用N1qlQuery类的工厂方法来构造,例如:

代码语言:javascript
运行
复制
//a version of the query that is constructed from positional parameters
N1qlQuery queryWithParameter = N1qlQuery.parameterized("SELECT name FROM `beer-sample` WHERE name LIKE $0", JsonArray.from("%dog%"));

//let Spring Data execute the query, projecting to the String class
List<String> beerNamesContainingDog = template.findByN1QLProjection(queryWithParameter, String.class);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35985700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档