我正在使用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;
}
我需要的是一个查询,以获取所有ContainerA ID的列表,其对应的总数为devices
,总数为attributes
,以及所有value
的总和;
我是JPA的新手,我尝试使用QueryDSL,但我没有设法让它工作。
获取所需信息的最佳方式是什么查询?
答案 0 :(得分: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
我假设您的架构中只有一对多的关系。如果设备和属性之间存在多对多关系,则查询可能会更复杂。