【发布时间】:2016-02-20 02:52:52
【问题描述】:
很多时候我必须在实体对象本身中获取 SQL 聚合查询结果。到目前为止,我可以通过以下代码实现同样的目标
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> q = cb.createTupleQuery();
Root<Test> c = q.from(Test.class);
q.multiselect(c, cb.count(c));
q.groupBy(c.get("type"));
TypedQuery<Tuple> t = em.createQuery(q);
List<Tuple> resultList = t.getResultList();
List<Test> list = new ArrayList<>();
for(Tuple tuple : resultList){
Test te = (Test) tuple.get(0);
te.setQuantity((long)tuple.get(1));
list.add(te);
}
但我想知道什么是最好的方法。我的测试实体是
@Entity
@Table(name = "test")
public class Test {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "type")
private Integer type = 0;
@Transient
private long quantity;
}
【问题讨论】:
-
如何在注释上实现动态选择标准。除了 group by ,我将有条件选择。所以我不认为使用公式是一个好的选择,它通常用于派生值而不是聚合函数。
-
如果我可以在公式中使用动态选择条件以及分组,请告诉我该怎么做。你能给我一个例子来说明我需要在它上面添加动态谓词的确切要求吗?
-
如果您认为原始问题没有达到重点,您应该添加新问题或编辑现有问题。很难理解“条件选择”的含义。你是指什么样的条件?
标签: sql hibernate jpa aggregate-functions jpa-2.1