簡體   English   中英

QueryDSL 從子查詢中選擇帶有別名的值

[英]QueryDSL selecting values with alias from Sub Query

我有兩個實體如下

Parent {
String parentID;
String parentName;
...
}

——

Child{
String parentID;
String childID;
Integer height;
....
}

它是父母和孩子之間的一對多關系。

我的意圖是擁有以下 SQL。

    SELECT p.parentID, p.parentName, c.childrenHeightRange
    FROM
    Parent p
    INNER JOIN
    (
    SELECT parentID, (CASE WHEN (min(height) = max(height)) THEN cast(min(height) as varchar) ELSE cast(min(height) as varchar) + ' - '  + cast(max(height) as varchar) END) as childrenHeightRange
FROM Child GROUP BY parentID) as c
    ON (p.parentID = c.parentID)

對於上述查詢,我​​為 childHeightRange 使用了 CaseBuilder,如下所示

   JPASubQuery subQuery = new JPASubQuery().from(child).groupBy(child.parentID);

    Expression<String> heightCaseExpression = new CaseBuilder()
            .when(child.height.min().eq(child.height.max()))
            .then(child.height.min().stringValue())
            .otherwise(child.height.min().stringValue() +"-"+child.height.max().stringValue())
            .as("childrenHeightRange");

然后是大問題..

我有

query.from(parent).innerjoin(subquery.list(child.parentID,heightCaseExpression )).on(parent.parentID.eq(child.parentID))
 .list(parent.parentID,parent.parentName, ............);

我如何從子查詢中引用 childrenHeightRange?

請幫忙。

謝謝

在 Querydsl JPA 中,您只能在 where 部分使用子查詢,因此您需要重新構建查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM