querydsl 4.2.2 子查询关联查询 SELECT d.ownerCode,d.billNo,d.tradeCode,d.sourceId,d.dList.decListsCount LEFT JOIN (select dl.DecHead_List_ID,count(dl.id) decListsCount from DecList dl group by dl.DecHead_List_ID) as dList on d.id=dList.DecHead_List_ID,DecHead中包含关联属性@OneManyList<DecList>;DecList中不包含关联属性,改成dsl怎么写
时间: 2024-03-12 11:50:15 浏览: 145
假设 DecHead 中的 @OneManyList<DecList> 属性对应的字段名为 decList,可以使用 QueryDSL 中的 DSL API 来构建与原始 SQL 查询语句等价的查询语句,如下所示:
```
QDecHead d = QDecHead.decHead;
QDecList dl = QDecList.decList;
NumberPath<Long> decListsCount = Expressions.numberPath(Long.class, "decListsCount");
JPAQuery<Tuple> query = new JPAQuery<>(entityManager);
query.select(d.ownerCode, d.billNo, d.tradeCode, d.sourceId, decListsCount)
.from(d)
.leftJoin(
JPAExpressions.select(dl.decHeadList.id, dl.id.count().as(decListsCount))
.from(dl)
.groupBy(dl.decHeadList.id)
.as(dList)
).on(d.id.eq(dList.get(dl.decHeadList.id)))
.fetch();
```
在这个查询语句中,我们使用了 JPAQuery 类来构建查询,使用了 QDecHead 和 QDecList 来引用 DecHead 和 DecList 实体类,使用了 Expressions.numberPath() 方法来构建 decListsCount 字段,使用了 JPAExpressions.select() 方法来构建子查询,使用了 .as() 方法给子查询结果起了一个别名 dList,最后使用了 .fetch() 方法执行查询并返回结果。
注意,这个查询语句中并没有包含 DecHead 和 DecList 实体类中的属性关联,如果需要查询 DecHead 中的 decList 属性对应的 DecList 列表,可以使用 .leftJoin(d.decList, dl) 方法进行关联查询。
阅读全文