2015-06-11 3 views
2

У меня есть два объекта, как показано нижезначения QueryDSL Выбор с псевдонимом от 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) 

Для вышеупомянутого запроса, я использовал CaseBuilder для childHeightRange ниже

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 из подзапроса?

Пожалуйста, помогите.

Благодаря

ответ

0

В Querydsl JPA вы можете использовать подзапросы только в части где, так что вам нужно будет перестроить свой запрос.