如何获取查询中实体的嵌套列表的总大小?

时间:2017-07-13 14:11:44

标签: java jpa querydsl

我正在使用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,但我没有设法让它工作。

获取所需信息的最佳方式是什么查询?

1 个答案:

答案 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

我假设您的架构中只有一对多的关系。如果设备和属性之间存在多对多关系,则查询可能会更复杂。