Я использовал оба способа картирования _id
, как описано в Spring Docs here.Как использовать 'id' при использовании DocumentDB через MongDB API в Spring DATA?
- с использованием
@Id
аннотацию - , имеющий поле с именем
id
без аннотаций
в моем предыдущем проекте, где мы использовали в качестве базы данных MongoDB и Spring данных для операций DAO. Он работал без проблем как для String
, так и для BigInteger
.
Теперь мы находимся using DocumentDB with MongoDB API (поскольку данные Spring не поддерживают DocumentDB). Я могу использовать все методы Spring Data, но я не могу использовать пользовательский идентификатор.
Ниже моя сущность:
public class S{
private String id;
/* other fields here */
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
/* getters and setters for other fields */
}
Это DAO:
public interface SDao extends MongoRepository<S, String> {
}
Теперь, если где-нибудь в моем коде я:
s = new S();
s.setId("some-id-here");
Запись получает успешно сохраняется в БД с пользовательским идентификатором some-id-here
как String
(не ObjectId
), но после что он выбрасывает ClassCastException
: Long
не может быть преобразован в Integer
.
То же самое происходит при использовании BigInteger
для id.
Если я не устанавливать пользовательский идентификатор, то я комментирую установку id
, как показано ниже:
s = new S();
// s.setId("some-id-here");
исключения не бросается, но запись ведется сохранялось со случайным идентификатором, предоставленным самой базой данных как ObjectcId
.
Я хочу сохранить запись с пользовательским идентификатором, чтобы я мог легко обновлять его, когда это необходимо. В настоящее время, если мне нужно обновить запись, мне нужно получить ее, используя ключ, который не сопоставляется с _id
, а затем обновить его, а затем удалить старую запись из БД, а затем сохранить обновленную, что я считаю абсолютно неэффективным поскольку я не могу использовать _id
.
Мой вопрос, почему я получаю ClassCastException
, что тоже упоминая Конверсия Long
в Integer
ли DocumentDB внутренне делать некоторые преобразования, которые бросает это исключение. Если да, то как его решить? Это ошибка?
Ну, допустим, что 'id', созданный' mongoDB'/'DocumentDB' по умолчанию, представленный в классе и использующий наш собственный идентификатор для операций. Хотя сейчас есть одно дополнительное поле, но все же оно доступно по цене по сравнению с обходным решением, которое мы должны были выполнить для наших операций по обновлению ранее. благодаря –