Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Spring JPA用于Couchbase嵌套文档值_Spring_Jpa_Spring Data Jpa_Couchbase_N1ql - Fatal编程技术网

如何将Spring JPA用于Couchbase嵌套文档值

如何将Spring JPA用于Couchbase嵌套文档值,spring,jpa,spring-data-jpa,couchbase,n1ql,Spring,Jpa,Spring Data Jpa,Couchbase,N1ql,我们如何构建SpringJPA查询并检索嵌套Couchbase文档值的数据? 我试图避免编写本机查询,并使用JPA方法基于嵌套在两个级别上的键检索数据 couchbase文档值的类型为 公司 其中,employees是一个列表,tasks是employees下的一个属性,employees是一个以详细信息为对象的列表 我想查询多个文档并按categoryId检索匹配的记录 将存储库接口扩展到CouchbaseRepository传递公司和文档id。 我试过类似的东西 // finding by

我们如何构建SpringJPA查询并检索嵌套Couchbase文档值的数据? 我试图避免编写本机查询,并使用JPA方法基于嵌套在两个级别上的键检索数据

couchbase文档值的类型为 公司 其中,employees是一个列表,tasks是employees下的一个属性,employees是一个以详细信息为对象的列表

我想查询多个文档并按categoryId检索匹配的记录

将存储库接口扩展到CouchbaseRepository传递公司和文档id。 我试过类似的东西

// finding by Employees-->Tasks-->Details-->CategoryId 
findByEmployeesTasksDetailsCategoryId(Integer id); // Does not work
但不起作用

"company": "Xyc",
"employees": {
   "name": "John Smith",
   "age": 24,
   "tasks": [
       {
            "id": 231,
            "date": "05-13-2019"
            "details": {
                    "categoryName": "Software",
                    "categoryId": 12,     
                    "description": "Buy Software"
                    "location": "Plano, Texas"
                    "zip": 75024
                }
            }
        },
       {
            "id": 789,
            "date": "05-14-2019"
            "details": {
                    "categoryName": "Hardware",
                    "categoryId": 17,     
                    "description": "Buy hardware"
                    "location": "Irving, Texas"
                    "zip": 75038
                }
            }
        },
        {
              "id": 456,
              "date": "05-15-2019"
               "details": {
                    "categoryName": "Hardware",
                    "categoryId": 17,     
                    "description": "Buy hardware"
                    "location": "Plano, Texas"
                    "zip": 75024
                 }
        }
    ]
}
我正在寻找JPA方法,在那里我可以通过categoryId获得详细任务或详细信息

类别17的预期产出

[
   {
      "categoryName": "Hardware",
      "categoryId": 17,     
      "description": "Buy keyboard and mouse"
      "location": "Irving, Texas"
      "zip": 75038
   },
   {
      "categoryName": "Hardware",
      "categoryId": 17,     
      "description": "Buy monitor"
      "location": "Plano, Texas"
      "zip": 75024
   }

]

不能使用Spring数据查询嵌套实体,因为它不是原始Spring数据规范的一部分。但是,您可以简单地使用@Query注释编写N1QL查询

例:


在您的情况下,您可以简单地使用UNNEST

如果父对象中已经存在属性categoryId怎么办?如果categoryId是顶级属性,您可以使用标准Spring数据语法进行查询,但它永远不会尝试将值与嵌套对象匹配。记住couchbase是无模式的,因此查询解析器无法猜测它引用了嵌套属性。它如何知道在第3级按属性进行过滤?预期的返回是什么?
    @Query("#{#n1ql.selectEntity} where #{#n1ql.filter} and companyId = $1 and " +
        " removed = $2 and lower(name) like $3 order by lower(name) asc LIMIT $4 OFFSET  $5 ")
    List<FamilyResource> listFamilies(String companyId, boolean removed, String name, int limit, int offset);