2017-12-05 9 views
0

私はquerydslを使ってSQL文を作成しようとしています。私はいくつかのquerydslコード記述しようとしましたQuerydsl: "複雑な"クエリを書くには

SELECT P.KEY, COUNT(P.VALUE) 
FROM RESOURCES R JOIN PROPERTIES P ON R.ID = P.ID 
WHERE P.KEY = "key" AND p.VALUE = "value" 
GROUP BY P.VALUE; 

::私は何を取得しようとしていることである

String s = queryFactory 
    .query() 
    .from(QResource.resource) 
    .join(QProperty.property) 
    .where(QResource.resource.properties.any().key.eq("key").and(QResource.resource.properties.any().value.eq("value"))) 
    .groupBy(QProperty.property.value) 
    .select(QProperty.property.key, QProperty.property.value.count()) 
    .toString(); 

私はそれを簡略化することができる推測しているが、他方で私はかなりありませんそれがうまくquerydslコード化されているかどうかを確認してください。

アイデア?

答えて

1

より簡略化されたバージョンは次のようになります。

QResource r = QResource.resource; 
QProperty p = QProperty.property; 
queryFactory 
    .select(p.key, p.value.count()) 
    .from(r) 
    .join(p).on(r.id.eq(p.id)) 
    .where(p.key.eq("key"), p.value.eq("value")) 
    .groupBy(p.value) 
    .fetchOne();