我使用Sping Boot (V2.2.2.RELEASE)+ Spring Data Mongo示例。在这个例子中,我有如下记录
{
"_id" : ObjectId("5cb825e566135255e0bf38a4"),
"firstName" : "John",
"lastName": "Doe"
}
字符串
我的仓库
@Repository
public interface EmployeeRepository extends CrudRepository<Employee, ObjectId>{
Employee findById(String id);
}
型
编码
Employee findById = employeeRepository.findById("5cb825e566135255e0bf38a4");
System.out.println(findById);
型
甚至下面的代码不工作
Query query = new Query(Criteria.where("id").is(new ObjectId("5cb825e566135255e0bf38a4")));
List<Employee> find = mongoTemplate.find(query, Employee.class);
型
4条答案
按热度按时间m0rkklqb1#
看来有两个问题
1.应使用ObjectId
字符串
型
我不是一个Java的家伙,所以可能会错过smth,但至少给予它一个尝试:)
n3h0vuf22#
在
_id: ObjectId("5cb825e566135255e0bf38a4")
中使用输入文档,可以使用这两种方法中的任何一种。假设employee
集合中有文档,您可以通过_id
的字符串值进行查询。字符串
MongoRepository接口扩展了CrudRepository,除了与CrudRepository等通用持久性技术无关的接口外,还公开了底层持久性技术的功能。
型
jhdbpxl93#
如果你遇到这个问题,只需在Mongodb模式中添加“_id:String”。看看下面的代码…
字符串
3zwjbxry4#
我也面对了这个问题。有趣的是,在2.1.7版本中运行良好
<documentRepository>.findById(<StringID>)
在2.2.2RELEASE中被视为String Id,而2.1.7RELEASE将其转换为ObjectId,因此查找查询可以工作。