代码之家  ›  专栏  ›  技术社区  ›  chebad

QueryDsl-创建子查询在两个表上运行的查询

  •  0
  • chebad  · 技术社区  · 6 年前

    我是这个API的新手,在子查询方面遇到了一些问题。我正在使用 QueryDsl - JPA . 我有两张桌子。 Film Producer . 在里面 制作人 producer_id 在我的 电影 表I也将此字段作为 制作人身份证 而且它是连接的。我的目标是数一数 film producer 使用 QueryDsl .

    QFilm film = QFilm.film;
    QProducer producer = QProducer.producer;
    createQuery().from(film, producer).select(film.count())
                .where(film.producerId.eq(producer.producerId)).fetch();
    

    我得到了所有匹配结果的总和,例如 制作人 电影 我有4部电影。第一个制片人有两部电影,第二个制片人也有两部。这个查询的结果是4。但我希望这个特定的查询对于第一个生产者只返回2,对于第二个生产者只返回2。如何存档?

    1 回复  |  直到 6 年前
        1
  •  0
  •   leopal Guilherme Oliveira    6 年前

    您没有提到两个db字段(OneToMany、OneToOne e.t.c)之间的关系。此外,您正在申报 QFilm QProducer 实例,而不在查询中实际使用它们。

    假设两者之间存在一对一的关系 producer.producer_id - film.producer_id 如果您正在使用Querydsl生成的元模型类,我将尝试以下方法:

        QFilm qFilm = QFilm.film;
        long count = creatyQuery().selectFrom(qFilm).where(qFilm.producerId.eq(yourDesiredProducerId)).fetchCount();
    
    
    推荐文章