Cannot autogenerate id of type java.lang.Integer for entity

博客指出利用MongoDB增加信息时,出现无法为实体自动生成java.lang.integer类型ID及ObjectId序列化问题,原因是在实体中指定了id。MongoDB默认集合主键“_id”类型为ObjectId。解决办法是去掉实体中id的类型或修改为ObjectId。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用mongodb增加信息的时候出现了标题的报错信息


org.springframework.dao.InvalidDataAccessApiUsageException: Cannot autogenerate id of type java.lang.Integer for entity of type com.zsf.spider.model.Article!
	at org.springframework.data.mongodb.core.EntityOperations$MappedEntity.assertUpdateableIdIfNotSet(EntityOperations.java:537)
	at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:1238)
	at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:1178)
	at com.zsf.spider.SpiderArticle.start(SpiderArticle.java:118)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

MongoDB无法为实体自动生成java.lang.integer类型的ID
MongoDB的ObjectId的序列化问题
因为在自己的实体中指定了id

MongoDB在不特殊指认的情况下,默认的集合主键是“_id”,类型是ObjectId。ObjectId是一个12字节的BSON类型字符串,包含了UNIX时间戳,机器识别码,进程号,计数值信息。机器码用来防止分布式系统生成id时冲突的问题,保证每台机器生成的识别码不同,进程号保证多线程情况下生成的id不同。

解决方法:

将实体中的id的类型去掉或者修改为ObjectId

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值