Как использовать Spring JPA для вложенных значений документов Couchbase - PullRequest
0 голосов
/ 14 мая 2019

Как построить запрос Spring JPA и извлечь данные для вложенных значений документов Couchbase? Я пытаюсь избежать написания собственного запроса и использую метод JPA для извлечения данных на основе ключей, которые вложены в 2 уровня.

Значение документа couchbase имеет тип Company Где сотрудники - это список, а задачи - это свойство подчиненного сотрудника, которое представляет собой список с деталями в виде объекта

Я хотел бы запросить несколько документов и получить соответствующие записи по categoryId.

Расширение интерфейса репозитория до CouchbaseRepository с передачей Company и идентификатора документа. Я пробовал что-то вроде

// 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.

Ожидаемый результат для 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
   }

]

1 Ответ

1 голос
/ 14 мая 2019

Вы не можете использовать Spring Data для запроса вложенных объектов, поскольку они не являются частью исходной спецификации Spring Data.Однако вы можете просто написать N1QL-запросы, используя @ Query аннотацию

ex:

    @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);

В вашем случае вы можете просто использовать UNNEST https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/unnest.html

...