Ответ может показаться очевидным, но я пробовал множество комбинаций аннотаций и конфигураций и не могу найти способ реализовать это, который работает во всех случаях (например, возможность делать CRUD, DocumentDbRepository и пользовательские методы).
Пример аннотации:
@Data
@...
@Document(collection="items")
public class Item {
@Id
private String itemId;
@PartitionKey
private String storeNumber;
...
}
Пример конфигурации:
...
public DocumentClient config() {
DocumentClient client = new DocumentClient(
uri, key, getConnectionPolicy(), ConsistencyLevel.Session);
client.readDatabases(new FeedOptions()).getQueryIterator().forEachRemaining(database -> {
System.out.println("Spring database link = " + database.getSelfLink());
});
/*
DocumentCollection coll = new DocumentCollection();
coll.setId("itemId");
// Corrected based on Sajeetharan's answer:
PartitionKeyDefinition partitionKeyDefinition = new PartitionKeyDefinition();
Collection<String> paths = new ArrayList<>();
partitionKeyDefinition.setPaths(paths);
paths.add("storeNumber");
coll.setPartitionKey(partitionKeyDefinition);
coll.setResourceId("items");
// OR
RequestOptions options = new RequestOptions();
options.setPartitionKey(new PartitionKey("clubNumber"));
try {
client.createCollection(String.format("/dbs/%s", DATABASE), coll, options);
} catch (DocumentClientException e) {
e.printStackTrace();
}
*/
return client;
}
...
Пока мой код работает, когда я разрешаю Microsoft обработать для меня ключ раздела и просто указать @Idполе вместе с конфигурацией клиента.Тем не менее, я хочу использовать конкретный ключ раздела в этом случае.Приведенные выше примеры являются лишь небольшим примером различных комбинаций, которые я пытался реализовать, чтобы заставить это работать.Тем не менее, я получаю исключения: java.lang.UnsupportedOperationException: PartitionKey value must be supplied for this operation
для чего-то такого простого, как findById()
.С учетом сказанного, я был бы признателен за помощь в поиске решения для этого.
Для записи, каждый из трех приведенных примеров создаст коллекцию для меня при загрузке Spring после удаления коллекции в пользовательском интерфейсе Azure.,А в настройках ключ раздела показан как '/ storeNumber', правильный ключ раздела, который я не задавал вручную в пользовательском интерфейсе Azure.Это не позволяет мне понять, почему компилятор жалуется на то, что я не предоставил ключ раздела, хотя Spring Boot непосредственно отвечает за создание коллекции с (правильным) ключом раздела, который я вижу в пользовательском интерфейсе Azure.
Я использую:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-documentdb</artifactId>
<version>LATEST</version>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>spring-data-cosmosdb</artifactId>
<version>2.1.1</version>
</dependency> <!-- mainly needed for @Id -->
в моем POM.
*** Буду признателен, если кто-то поможет мне в том, что я должен сделать сейчас, когда мой вопрос решен,Если уместно отметить вопрос как дублирующий или полностью исключить вопрос, я с удовольствием это сделаю, но я чувствую, что это может быть полезно для кого-то другого.А пока я отвечу на свой вопрос, поскольку данный ответ не разрешил его напрямую, хотя ссылка, приведенная в комментарии, очень помогла.