java - 如何使用存储库接口(interface)在 Spring Data 中通过其嵌套对象的 objectId 查找集合?

标签 java spring mongodb spring-data-mongodb

我在 MongoDB 中有一个集合,其中包含这样的项目:

{
    "_id" : ObjectId("53e4d31d1f6b66e5163962e3c"),
    "name" : "bob",
    "nestedObject" : {
        "_id" : ObjectId("53f5a623cb5e4c1ed4f6ce67")
        //more fields...
    }
}

此项目的 Java 表示如下:

public class SomeObject {
    @Id
    private String id;
    private String name;
    private NestedObject nestedObject;

    //getters and setters
}

Repository 接口(interface)定义如下:

public interface SomeObjectRepository extends MongoRepository<SomeObject, String> {
    public List<SomeObject> findByName(String name);
    public List<SomeObject> findByNestedObjectId(String id);
    //some other find functions
}

现在,findByName(String name) 正在正常工作,但 findByNestedObjectId(String id) 什么也不返回。

问题是:是否可以使用存储库接口(interface)通过其嵌套对象的属性找到集合项?如果没有,解决此问题的推荐方法是什么?是否可以不重新实现整个存储库?

最佳答案

我已经想出了如何解决这个问题。

将参数类型改为org.bson.types.ObjectId;来自字符串

public List<SomeObject> findByNestedObjectId(ObjectId id);

当你调用它时使用

 repositoryName.findByNestedObjectId(new ObjectId(theIdString));

关于java - 如何使用存储库接口(interface)在 Spring Data 中通过其嵌套对象的 objectId 查找集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25441514/

相关文章:

json - 将 JSON 对象发送到 Spring POST Controller

java - Spring 在哪里创建 RestTemplate?

node.js - 将 Mongo 输出与 Node 结合起来用于 API

java - 使用子对象 Java 访问父字段

java - 如何在没有网络访问的情况下将 parckage(例如 mmlspark)安装到 CDH 集群?

java - 为什么要在线程中使用Join?

spring - 我可以在 Micronaut 中使用 spring data jpa 吗?

java - (ObjectOptimisticLockingFailureException) 单个事务中的 StaleStateException

mongodb - 无法使用 golang 将结构保存到 mongodb 中(仅创建空记录)

java - 使用mongodb和java从json文件中解析特定量的数据