首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过@DBRef相关列表进行Spring MongoDB + QueryDSL查询

通过@DBRef相关列表进行Spring MongoDB + QueryDSL查询
EN

Stack Overflow用户
提问于 2016-08-30 09:59:21
回答 1查看 529关注 0票数 0
代码语言:javascript
复制
@Document(collection="users")
public class User{
  @Id
  private int id;

  private String name;
  ...
  //getters-setters
}

@Document(collection="models")
public class Model{
  @Id
  private int id;
  private String name;
  @DBRef
  private List<User> users;
  ...
  //getters-setters
}

我尝试了这个解决方案,但是它没有返回任何东西:

QModel模型=新的QModel();可分页的=新的PageRequest(0,100);

返回可分页的modelsRepository.findAll(model.users.any().id.eq(anUserId),);

EN

回答 1

Stack Overflow用户

发布于 2016-09-01 21:09:49

我认为这完全取决于MongoDB集合中的JSON数据。

在您的例子中,"models“集合应该有一个"users”Array属性。只要键名匹配(即"users"),它就应该可以工作。

详细示例:-

下面的示例运行良好。

人员集合:-

代码语言:javascript
复制
{
    "_id" : ObjectId("57c8269b3ee7df409d4d2b64"),
    "name" : "Erin",
    "places" : [ 
        {
            "$ref" : "places",
            "$id" : ObjectId("57c813b33ee7df409d4d2b58")                
        }
    ],
    "url" : "bc.example.net/Erin"
}

地点集合:-

代码语言:javascript
复制
{
    "_id" : ObjectId("57c813b33ee7df409d4d2b58"),
    "name" : "Broadway Center",
    "url" : "bc.example.net"
}

类:-

Places类:-

代码语言:javascript
复制
@Document(collection = "places")
public class Places implements Serializable {

    private static final long serialVersionUID = -5500334641079164017L;

    @Id
    private String id;

    private String name;

    private String url;

    ...get and setters
}

人员类:-

代码语言:javascript
复制
@Document(collection = "people")
public class People implements Serializable {

    private static final long serialVersionUID = 6308725499894643034L;

    @Id
    private String id;

    private String name;

    @DBRef
    private List<Places> places;

    private String url;

    ...get and setters
}

存储库类:-

代码语言:javascript
复制
@Repository
public interface PeopleRepository extends PagingAndSortingRepository<People, String> {

    public People findById(String id);

    @Query(value = "{ 'status' : ?0 }")
    public Page<People> findByStatus(String status, Pageable pageable);

}

查找全部:-

代码语言:javascript
复制
public Boolean findAllPeople() {

        Page<People> peoplePage = peopleRepository.findAll(new PageRequest(0, 20));

        System.out.println("Total elements :" + peoplePage.getTotalElements());

        for (People people : peoplePage) {
            System.out.println("People id :" + people.getId());
            System.out.println("Place size :" + people.getPlaces().size());
            people.getPlaces().forEach(p -> System.out.println(p.getName()));
        }

        return true;

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39217699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档