java - QueryDsl - 使用在两个表上操作的子查询创建查询
问题描述
我是这个 API 的新手,我在使用子查询时遇到了一些问题。我正在使用QueryDsl - JPA
. 我有两张桌子,例如Film
和Producer
。在Producer
表中我有一个主键producer_id
,在我的Film
表中我也有这个字段producer_id
并且它是连接的。我的目标是计算特定用途的实体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();
我得到了所有匹配结果的总和,例如在Producer
表中我有 2 位制片人,在Film
表中我有 4 部电影。第一个制片人有 2 部电影,第二个也有 2 部电影。这个查询的结果是 4。但是我希望这个特定的查询只为第一个制片人返回 2 个,而第二个制片人只返回 2 个。这个怎么存档?
解决方案
您没有提到两个数据库字段(OneToMany、OneToOne 等)之间的关系。此外,您还声明了一个QFilm
和QProducer
实例,而没有在查询中实际使用它们。
producer.producer_id
假设-之间存在 OneToOne 关系,film.producer_id
并且您正在使用 Querydsl 生成的元模型类,我会尝试这样做:
QFilm qFilm = QFilm.film; long count = creatyQuery().selectFrom(qFilm).where(qFilm.producerId.eq(yourDesiredProducerId)).fetchCount();
推荐阅读
- vb6 - 动态添加控件的并排(regfree)问题
- python - 获取对象路径中的键名
- php - Laravel Job 中的 URL 未正确编码
- git - 从撰写文件构建容器在搬运工中失败
- javascript - 如何在jQuery函数之前添加插值字符串
- python - Python:根据if语句条件填充新的df列
- python - Tesseract returns sometimes an empty string if an unknown character occurs
- sockets - 最小的 TCP 客户端-服务器:accept() 从不接收连接?
- bitmask - Use of (a | (a+1) ) in programming
- linux - 跟踪文件但忽略更改,作为 repo 配置