Для этой операции необходимо указать значение PartitionKey - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь получить документ из коллекции Azure Cosmos Db.Я сталкиваюсь с ошибкой

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.UnsupportedOperationException: PartitionKey value must be supplied for this operation.] with root cause
java.lang.UnsupportedOperationException: PartitionKey value must be supplied for this operation.

Я пытался найти в Интернете, как я могу предоставить значение ключа раздела для функции findById (), но похоже, что «Azure Spring data cosmosdb» не 'у него есть возможность предоставить ключу раздела функцию для реализации Java

orderTransactionRepository.findById("id").get

1 Ответ

0 голосов
/ 12 февраля 2019

Поиск тестового кода метода findById для многораздельного сбора, который упоминается на домашней странице spring-data-cosmos .

@Test
    public void testFindByIdForPartitionedCollection() {
        final List<Address> addresses = repository.findByPostalCode(TestConstants.POSTAL_CODE);

        assertThat(addresses.size()).isEqualTo(2);
        assertThat(addresses.get(0).getPostalCode().equals(TestConstants.POSTAL_CODE));
        assertThat(addresses.get(1).getPostalCode().equals(TestConstants.POSTAL_CODE));
    }

Youможет найти операторы здесь :

Для секционированной коллекции, если вы хотите запросить записи по findById (id), будет выдано исключение.

// Incorrect for partitioned collection, exception will be thrown
   Address result = repository.findById(id);  // Caution: Works for non-partitioned collection

Вместо этогоВы можете запрашивать записи по имени поля идентификатора с помощью пользовательского запроса.

// Correct, postalCode is the ID field in Address domain
   @Repository
   public interface AddressRepository extends DocumentDbRepository<Address, String> {
      List<Address> findByPostalCode(String postalCode);
   }

   // Query
   List<Address> result = repository.findByPostalCode(postalCode);

Еще один способ, которым я обнаружил, что вы все еще можете использовать Document DB normal sdk в пакете spring-data-cosmos, вам просто нужно инкапсулироватьметод по-простому.Пожалуйста, обратитесь к этому образцу кода .


Просто для краткости, это было в основном из-за общих данных Spring, изменяющих имя интерфейса, которое реализовывал querylookupstrategy.Вам нужно вернуться к предыдущей версии cosmos-db i.e. 2.0.5!Вот ссылка с указанием проблемы github.com/Microsoft/spring-data-cosmosdb/issues/304

...