【发布时间】:2016-01-09 17:30:46
【问题描述】:
是否可以编写与此 SQL 等效的 Querydsl?
SELECT coalesce(m.MATERIAL_GROUP, sc.MATERIAL_ID) AS GROUP_ID FROM STOCK_CARD sc JOIN MATERIAL m ON (sc.MATERIAL_ID = m.ID) GROUP BY GROUP_ID;
在 Querydsl 中我尝试过(stockCard 是静态导入的):
public List<Long> justAnExample() {
NumberPath<Long> group_id = Expressions.numberPath(Long.class, "group_id");
return from(stockCard)
.groupBy(group_id)
.list(stockCard.material.materialGroup.id.coalesce(stockCard.material.id).as(group_id));
}
但是 Querydsl 似乎忽略了“as()”,因为生成的 SQL 是:
select coalesce(material1_.MATERIAL_GROUP, stockcard0_.MATERIAL_ID) as col_0_0_ from STOCK_CARD stockcard0_, MATERIAL material1_ where stockcard0_.MATERIAL_ID=material1_.id group by group_id
请注意,这只是一个非常简化的查询,用于尝试是否可行。 谢谢!
【问题讨论】:
-
您是否正在使用 JPA?这看起来不像 Querydsl 输出,而更像是 Hibernate。
-
我正在使用 Hibernate 和 Spring 数据,我的存储库类扩展了 QueryDslRepositorySupport。
标签: java sql group-by querydsl