【问题标题】:Querydsl SELECT something as something_elseQuerydsl SELECT something as something_else
【发布时间】: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


【解决方案1】:

这可能与这个 Hibernate 错误 https://hibernate.atlassian.net/browse/HHH-1902

有关

【讨论】:

    猜你喜欢
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多