Поиск тестового кода метода 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