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

Java QueryDsl-创建子查询在两个表上运行的查询,java,jpa,jakarta-ee,querydsl,Java,Jpa,Jakarta Ee,Querydsl,我是这个API的新手,在子查询方面遇到了一些问题。我正在使用QueryDsl-JPA。我有两个表格,例如电影和制片人。在Producer表中,我有一个主键Producer\u id,在我的Film表中,我还有一个字段作为Producer\u id,并且它是连接的。我的目标是使用QueryDsl计算特定制作人的电影实体的数量 我写了类似的东西: QFilm film = QFilm.film; QProducer producer = QProducer.producer; createQuery

我是这个API的新手,在子查询方面遇到了一些问题。我正在使用
QueryDsl-JPA
。我有两个表格,例如
电影
制片人
。在
Producer
表中,我有一个主键
Producer\u id
,在我的
Film
表中,我还有一个字段作为
Producer\u id
,并且它是连接的。我的目标是使用
QueryDsl
计算特定
制作人的
电影
实体的数量

我写了类似的东西:

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

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

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

假设
producer.producer\u id
-
film.producer\u id
之间存在一对一的关系,并且您正在使用Querydsl生成的元模型类,我将尝试以下方法:

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