首页 > 解决方案 > QueryDsl - 使用在两个表上操作的子查询创建查询

问题描述

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

我写了类似的东西:

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 个。这个怎么存档?

标签: javajpajakarta-eequerydsl

解决方案


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

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

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


推荐阅读