2017-07-13 3 views
2

私はJPAを使用していますが、私はこのようなデータ構造を持っている:私は必要なものクエリ内のエンティティのネストされたリストの合計サイズを取得する方法は?

class ContainerA { 
    long id; 
    List<ContainerB> bs; 
} 

class ContainerB { 
    long id; 
    List<ContainerC> cs; 
} 

class ContainerC { 
    long id; 
    List<Device> devices; 
} 

class Device { 
    long id; 
    List<Attribute> attributes; 
} 

class Attribute { 
    long id; 
    long value; 
} 

は、devicesのそれに対応する総数は、attributesの合計数と、すべてのContainerAのIDのリストを取得するクエリですすべての和はvalueである。

私はJPAを初めて使い、QueryDSLを使用しようとしましたが、動作させることはできませんでした。

私が必要とする情報を得るための最良の方法は何ですか?

答えて

10

この種のレポートにはSQLを使用します。それは簡単ですし、私はそれもずっと速くなる賭けを取っています。ここでは簡単なクエリがあります:

SELECT 
    a.id, 
    COUNT(DISTINCT d.id) AS Devices, 
    COUNT(att.id) AS Attributes, 
    SUM(att.value) AS TotalAttributeValue 
FROM ContainerA AS a 
LEFT JOIN ContainerB AS b ON a.id = b.a_id 
LEFT JOIN ContainerC AS c ON b.id = c.b_id 
LEFT JOIN Device AS d ON c.id = d.c_id 
LEFT JOIN Attribute AS att ON d.id = att.d_id 
GROUP BY a.id 

私はあなたのスキーマに一対一の関係があると仮定しています。デバイスと属性の間に多対多の関係がある場合、クエリはもう少し複雑かもしれません。

関連する問題