Как преобразовать тип из ObjectId в Long при использовании MongoTemplate? - PullRequest
0 голосов
/ 27 сентября 2019

Обычно при использовании репозиториев пружинных данных необходим объект, в котором могут быть сохранены данные результатов, например, клиент в этом примере: https://spring.io/guides/gs/accessing-data-mongodb/.

В моем случае я пытаюсь использовать объект, который объявлен в другом проекте, который я импортирую, используя maven - назовем его MyDoc.Объект имеет атрибут Long id, в то время как документ в MongoDB имеет поле добавления _id из типа ObjectId.Это, кстати, так, потому что MongoDB служит архивом, и фактический id из MyDoc не будет уникальным.

В классе обслуживания я затем использую этот MongoTemplate для выполнения запросов к базе данных следующим образом:

List<MyDoc> list = template.findAll(MyDoc.class, "DOCS");
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.bson.types.ObjectId] to type [java.lang.Long] 

Как я могу преобразовать ObjectId в тип Long?

Альтернативно, я мог бы, конечно, использовать драйвер MongoDB Java, но я хотел уменьшить количество зависимостейподдерживать, поскольку драйвер MongoDB поставляется с зависимостью boot-starter-data-MongoDB, а также в конце концов надеется на более интуитивный способ взаимодействия с базой данных, как с хранилищами данных Spring.

1 Ответ

0 голосов
/ 30 сентября 2019

Во-первых, Long Id от MyDoc не уникален, поэтому он не может выступать в роли _id mongoDB.Тогда вам нужно иметь еще одно поле _id в вашем классе.По умолчанию данные Spring в mongoDB отобразят поле с именем id в _id в базе данных.По сути, вы можете создать класс-оболочку вокруг MyDoc, расширив его, а затем добавив новое поле типа ObjectId и пометив его @Id.Таким образом, у вас будет уникальный индекс, а также mongoTemplate не будет пытаться преобразовать _id базы данных в Long id

...