【问题标题】:QueryDsl - creating query with subquery operating on two tablesQueryDsl - 使用在两个表上操作的子查询创建查询
【发布时间】:2018-06-15 11:49:41
【问题描述】:

我是这个 API 的新手,我在使用子查询时遇到了一些问题。我正在使用QueryDsl - JPA。我有两张桌子,例如FilmProducer。在Producer 表中,我有一个主键producer_id,在Film 表中,我也有这个字段为producer_id,并且它已连接。我的目标是使用QueryDsl 计算特定producerfilm 实体的数量。

我写了类似的东西:

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

我得到了所有匹配结果的总和,例如在Producer 表中我有 2 个制片人,在Film 表中我有 4 部电影。第一个制片人有 2 部电影,第二个也有 2 部电影。这个查询的结果是 4。但我希望这个特定的查询只为第一个制片人返回 2 个,第二个制片人只返回 2 个。这个怎么存档?

【问题讨论】:

    标签: java jpa jakarta-ee querydsl


    【解决方案1】:

    您没有提到两个数据库字段(OneToMany、OneToOne 等)之间的关系。此外,您声明了一个 QFilmQProducer 实例,但实际上并未在查询中使用它们。

    假设producer.producer_id - film.producer_id 之间存在 OneToOne 关系,并且您使用的是 Querydsl 生成的元模型类,我会尝试这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多