Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用MongoTemplate时如何将类型从ObjectId转换为Long?_Java_Spring_Spring Boot_Spring Data_Spring Data Mongodb - Fatal编程技术网

Java 使用MongoTemplate时如何将类型从ObjectId转换为Long?

Java 使用MongoTemplate时如何将类型从ObjectId转换为Long?,java,spring,spring-boot,spring-data,spring-data-mongodb,Java,Spring,Spring Boot,Spring Data,Spring Data Mongodb,通常在使用spring数据存储库时,需要一个可以存储结果数据的对象,如本例中的客户: 在我的例子中,我试图使用一个对象,它是在我使用maven导入的另一个项目中声明的——让我们称它为MyDoc。对象有一个属性Long id,而MongoDB中的文档有一个添加字段\u id,来自typeObjectId。顺便说一句,之所以如此,是因为MongoDB用作存档,MyDoc中的实际id不会是唯一的 在服务类中,我使用MongoTemplate进行如下数据库查询: List<MyDoc> li

通常在使用spring数据存储库时,需要一个可以存储结果数据的对象,如本例中的客户:

在我的例子中,我试图使用一个对象,它是在我使用maven导入的另一个项目中声明的——让我们称它为
MyDoc
。对象有一个属性
Long id
,而MongoDB中的文档有一个添加字段
\u id
,来自type
ObjectId
。顺便说一句,之所以如此,是因为MongoDB用作存档,MyDoc中的实际
id
不会是唯一的

在服务类中,我使用MongoTemplate进行如下数据库查询:

List<MyDoc> list = template.findAll(MyDoc.class, "DOCS");
如何将ObjectId转换为Long类型


另外,我当然可以使用java MongoDB驱动程序,但我想减少需要维护的依赖项的数量,因为MongoDB驱动程序附带了启动启动程序数据MongoDB依赖项,并且希望最终能够以更直观的方式,与数据库进行交互,就像与spring数据存储库一样。

第一件事是MyDoc的长Id不是唯一的,因此它不能充当mongoDB的_Id。 然后,您需要在您的类中再添加一个_id字段。默认情况下,Spring data mongoDB将把名为id的字段映射到数据库中的_id。
基本上,您可以通过扩展
MyDoc
创建一个包装类,然后添加类型为
ObjectId
的新字段,并使用
@Id
对其进行注释。通过这种方式,您将拥有唯一的索引,并且mongoTemplate不会尝试将数据库的
\u id
转换为
长id

如果数据库中的字段是ObjectId,您最好相应地对齐模型。如果你想把它转换成别的东西,也许是字符串?它当然不适合长字符,它是12字节长的。另一种选择是,如果不需要该字段,则完全忽略该字段。您的“真实但非唯一”长id是否存在于文档中的其他位置?
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.bson.types.ObjectId] to type [java.lang.Long]